Source Code Fundamentals: Variables
A variable is a named area of data storage that has a type and a value. Distinct variables may have the same name provided they are in different scopes. A constant is a variable that, once initialized, its value cannot be changed. Based on the context in which it is declared, a variable has a scope.
The following kinds of variable may exist in a script:
Local Variables
Except for function parameters, a local variable is never defined explicitly; instead, it is created when it is first assigned a value. A local variable can be assigned to as a parameter in the parameter list of a function definition or inside any compound statement. It has function scope.
Consider the following example:
function do_it(bool $p1): void {
$count = 10;
// ...
if ($p1) {
$message = "Can't open file.";
// ...
}
// ...
}
function call_it(): void {
do_it(true);
}
Here, the parameter $p1
(which is a local variable) takes on the value true
when do_it
is called. The local
variables $count
and $message
take on the type of the respective value being assigned to them.
Consider the following example:
function f(): void {
$lv = 1;
echo "\$lv = $lv\n";
++$lv;
}
<<__EntryPoint>>
function main(): void {
for ($i = 1; $i <= 3; ++$i)
f();
}
In this example, the value of the local variable $lv
is not preserved between
the function calls, so this function f
outputs "$lv = 1
" each time.
Array Elements
An array is created via a vec-literal, a dict-literal, a
keyset-literal. At the same time, one or more elements may be created
for that array. New elements are inserted into an existing array via
the simple-assignment
operator in conjunction with the subscript
[]
operator.
The scope of an array element is the same as the scope of that array's name.
$colors1 = vec["green", "yellow"]; // create a vec of two elements
$colors1[] = "blue"; // add element 2 with value "blue"
$colors2 = dict[]; // create an empty dict
$colors2[4] = "black"; // create element 4 with value "black"
Instance Properties
These are described in the class instance properties section. They have class scope.
Static Properties
These are described in the class static properties section. They have class scope.
Class and Interface Constants
These are described in the class constants section. They have class or interface scope.