Expressions And Operators: Assignment
The simple-assignment operator
= assigns the value of the right-hand operand to the left-hand operand. For example:
$a = 10
This form is commonly used in expression statements or as the first part of a
for loop's controlling expressions. This
operator involves a side-effect, that of assigning the value to
$a. And being a non-void expression, it also has a value,
in this case, 10. However, that value is not used, so it is discarded. However, consider the following:
$a = $b = 10 // equivalent to $a = ($b = 10)
As indicated by the comment, this operator is right-associative, so 10 is first assigned to
$b, whose value is assigned to
whose value is not used, so it is discarded.
We can assign to array elements, as follows:
$v = dict[0 => 10, 1 => 20, 2 => 30]; $v = 22; // change the value of the element with int key 1 $v[-10] = 19; // insert a new element with int key -10
For a dict, if the location designated by the left-hand operand is a non-existent array element, a new element is inserted with the designated key and with a value being that of the right-hand operand. (For a vec, a new element can only be added to the right-hand end.)
We can assign to the elements of a string, as follows:
$s = "red"; $s = "X"; // OK; "e" -> "X" $s = "Z"; // extends string with "Z", padding with spaces in - $s = "red"; $s = "DEF"; // "r" -> "D"; only 1 char changed; "EF" ignored $s = ""; // "D" -> "\0"
The left-most single character from the right-hand operand is stored at the designated location; all other characters in the right-hand operand string are ignored. If the designated location is beyond the end of the destination string, that string is extended to the new length with spaces (U+0020) added as padding beyond the old end and before the newly added character. If the right-hand operand is an empty string, the null character \0 (U+0000) is stored.
A compound-assignment operator has the form op
= and is a short-hand notation for situations in which we wish to operate on the
value of a variable and to store the resort back in that variable. For example:
$v = 10; $v += 20; // $v = 30 $v -= 5; // $v = 25 $v .= 123.45; // $v = "25123.45"
$v += 20 is equivalent to
$v = $v + 20. Likewise for
$v -= 5 and
$v = $v - 5, and
$v .= 123.45 and
$v = $v . 123.45. However, consider the following:
$list[$i++] += 10;
When the left-hand expression contains a side-effect, that side-effect is performed only once.
The complete set of compound-assignment operators is: