Introducció

Les variables en PHP:

  • Es representen amb un signe de dòlar seguit del nom de la variable.
  • El nom de la variable distingeix entre majúscules i minúscules.
  • Un nom de variable vàlid comença amb una lletra o guió baix, seguit de qualsevol nombre de lletres, números o guions baixos.
<?php
$var = 'Bob';
$Var = 'Alice';
echo "$var, $Var";      // outputs "Bob, Alice"

$4site = 'not yet';     // invalid; starts with a number
$_4site = 'not yet';    // valid; starts with an underscore
$täyte = 'mansikka';    // valid; 'ä' is (Extended) ASCII 228.
?>

Assignació per referència

Per defecte, les variables sempre s’assignen per valor. És a dir, quan assigneu una expressió a una variable, tot el valor de l’expressió original es copia a la variable de destinació. Això significa, per exemple, que després d'assignar el valor d'una variable a una altra, canviar una d'aquestes variables no tindrà cap efecte sobre l'altre.

Per assignar per referència, simplement poseu un signe ampersand (&) al començament de la variable que s'està assignant (la variable font). Per exemple, el fragment de codi següent emet dues vegades "El meu nom és Bob":

<?php
$foo = 'Bob';              // Assign the value 'Bob' to $foo
$bar = &$foo;              // Reference $foo via $bar.
$bar = "My name is $bar";  // Alter $bar...
echo $bar;
echo $foo;                 // $foo is altered too.
?>

Una cosa important a tenir en compte és que només es poden assignar variables de nom per referència.

<?php
$foo = 25;
$bar = &$foo;      // This is a valid assignment.
$bar = &(24 * 7);  // Invalid; references an unnamed expression.

function test()
{
   return 25;
}

$bar = &test();    // Invalid.
?>

Inicialització

No cal inicialitzar variables en PHP, però és una pràctica molt bona. Les variables no inicialitzades tenen un valor per defecte del seu tipus en funció del context en què s’utilitzen: els booleans predeterminen a false, els enters i els floats per defecte a zero, els string (per exemple, s’utilitzen en echo) s’inicien com un string buit i els arrays són arrays buits.

<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);

// Boolean usage; outputs 'false' (See ternary operators for more on this syntax)
echo($unset_bool ? "true\n" : "false\n");

// String usage; outputs 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Integer usage; outputs 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);

// Float/double usage; outputs 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Array usage; outputs array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php)
// Outputs: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>

Basar-se en el valor per defecte d’una variable no inicialitzada és problemàtic en el cas d’incloure un fitxer en un altre que utilitzi el mateix nom de variable. S'emet un error de nivell E_NOTICE en cas de treballar amb variables no inicialitzades, però no en el cas d'afegir elements a la matriu no inicialitzada. La construcció del llenguatge isset() és pot utilitzar per detectar si ja s'ha inicialitzat una variable.