Basics
Оновлено: 11.05.2023
Змінні в PHP позначаються знаком долара, за яким слідує ім'я змінної. Ім'я змінної є чутливим до регістру.
Назви змінних відповідають тим самим правилам, що й інші мітки в PHP. Правильне ім'я змінної починається з літери або символу підкреслення, за яким слідує будь-яка кількість літер, цифр або символів підкреслення. У вигляді регулярного виразу це буде виглядати так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Примітка: Для наших цілей тут літери - це букви від a-z, A-Z та байти від 128 до 255 (0x80-0xff).
Примітка: $this - це спеціальна змінна, яку не можна присвоювати. До версії PHP 7.1.0 було можливе непряме присвоювання (наприклад, за допомогою змінних-змінних).
Дивіться також Посібник з іменування Userland.
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var"; // outputs "Bob, Joe"
$4site = 'not yet'; // invalid; starts with a number
$_4site = 'not yet'; // valid; starts with an underscore
$täyte = 'mansikka'; // valid; 'ä' is (Extended) ASCII 228.
?>
За замовчуванням змінні завжди присвоюються за значенням. Це означає, що коли ви присвоюєте вираз змінній, все значення вихідного виразу копіюється у змінну призначення. Це означає, наприклад, що після присвоєння значення однієї змінної іншій, зміна однієї з цих змінних не матиме жодного впливу на іншу. Для отримання додаткової інформації про цей тип присвоювання див. розділ Вирази.
PHP також пропонує інший спосіб присвоювання значень змінним: присвоювання за посиланням. Це означає, що нова змінна просто посилається (іншими словами, "стає псевдонімом" або "вказує на") на вихідну змінну. Зміни в новій змінній впливають на вихідну, і навпаки.
Для присвоювання за посиланням просто додайте амперсанд (&) на початку змінної, що присвоюється (змінної-джерела). Наприклад, у наведеному нижче фрагменті коду двічі виводиться "Мене звуть Боб":
<?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.
?>
Важливо зазначити, що тільки іменовані змінні можуть бути присвоєні за посиланням.
<?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.
?>
Ініціалізація змінних у PHP не є обов'язковою, проте це дуже хороша практика. Неініціалізовані змінні за замовчуванням мають значення свого типу залежно від контексту, в якому вони використовуються - булеві змінні за замовчуванням мають значення false, цілі та плаваючі - нуль, рядки (наприклад, використовувані в echo) встановлюються як порожній рядок, а масиви стають порожнім масивом.
Приклад #1 Значення за замовчуванням неініціалізованих змінних
<?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 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);
?>
Покладатися на значення за замовчуванням неініціалізованої змінної проблематично у випадку включення одного файлу в інший, який використовує те саме ім'я змінної. Помилка рівня E_WARNING (до версії PHP 8.0.0 - E_NOTICE) видається у випадку роботи з неініціалізованими змінними, але не у випадку додавання елементів до неініціалізованого масиву. Мовна конструкція isset() може бути використана для виявлення того, що змінна вже була ініціалізована.