Променливи
PHP Manual

Основи

Променливите в PHP се представят чрез знака за долар, последван от името на променливата. Името на променливата е чувствително към регистъра.

Имената на променливите следват същите правила като другите етикети в PHP. Валидното име на променлива започва с буква или подчертавка, последвана от произволен брой букви, цифри или подчертавки. Като регулярен израз, това би могло да бъде представено така: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Забележка: В случая, под буква се разбират a-z, A-Z и байтовете от 127 до 255 (0x7f-0xff).

Забележка: $this е специална променлива, която не може да бъде присвоявана.

Съвет

Вж. също Userland Naming Guide.

За информация относно функциите, свързани с променливи, вижте Справочник на функциите за променливи.

<?php
$var 
'Bob';
$Var 'Joe';
echo 
"$var, $Var";      // извежда "Bob, Joe"

$4site 'not yet';     // невалидно; започва с цифра
$_4site 'not yet';    // валидно; започва с подчертавка
$tдyte 'mansikka';    // валидно; 'д' е (Разширен) ASCII 228.
?>

По подразбиране променливите винаги се присвояват по стойност. С други думи, когато присвоявате израз на променлива, цялата стойност на оригиналния израз се копира в променливата. Това означава, например, че след присвояване стойността на една променлива на друга, променянето на една от тези променливи няма да се отрази на другата. За повече информация относно този тип присвояване, вижте главата за Изрази.

PHP също предлага и още един начин за присвояване на стойности на променливи: присвояване по референция. Това означава, че новата променлива просто указва (с други думи, "става псевдоним на" или "сочи към") оригиналната променлива. Промени в новата променлива влияят на оригиналната и обратно.

За да присвоите променлива по референция, просто сложете амперсанд (&) в началото на променливата, която се присвоява (променливата - източник). Например, следващото парче код извежда 'My name is Bob' два пъти:

<?php
$foo 
'Bob';              // Присвояване на стойността 'Bob' на $foo
$bar = &$foo;              // Указване на $foo чрез $bar. (Присвояване по референция)
$bar "My name is $bar";  // Променяне на $bar...
echo $bar;
echo 
$foo;                 // $foo е променена също.
?>

Важно нещо за отбелязване е, че само именувани променливи могат да бъдат присвоявани по референция.

<?php
$foo 
25;
$bar = &$foo;      // Това е валидно присвояване.
$bar = &(24 7);  // Невалидно; указва безименен израз.

function test()
{
   return 
25;
}

$bar = &test();    // Невалидно.
?>

Инициализирането на променливите в PHP не е необходимо, но все пак е добра практика то да се прави. Неинициализираните променливи имат стойност по подразбиране според типа им в зависимост от контекста, в който се използват - булевите имат стойност по подразбиране FALSE, целочислените и плаващите - нула, низовете (напр. използваните в echo()) се установяват в празен низ, а масивите - в празен масив.

Example #1 Стойности по подразбиране на неинициализирани променливи

<?php
// Неинициализирана И нереферирана (без контекст) променлива; извежда NULL
var_dump($unset_var);

// Употреба на булеви; извежда 'false' (Вж. третичния оператор за повече относно синтаксиса)
echo($unset_bool "true\n" "false\n");

// Употреба на низове; извежда 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Употреба на целочислени; извежда 'int(25)'
$unset_int += 25// 0 + 25 => 25
var_dump($unset_int);

// Употреба на плаващи/двойна точност; извежда 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Употреба на масиви; извежда array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"// array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Употреба на обекти; създава нов обект от stdClass (вж. http://www.php.net/manual/en/reserved.classes.php)
// Извежда: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo 'bar';
var_dump($unset_obj);
?>

Да се разчита на стойностите по подразбиране на неинициализирана променлива е проблемно в случай на включване (include) на един файл в друг, който използва същото име на променлива. Това също представлява и значителен риск за сигурността с включена директива register_globals. В случай на работа с неинициализирани променливи се извежда грешка от ниво E_NOTICE, освен в случаите на добавяне на елементи към неициализиран масив. За установяване дали дадена променлива е била инициализирана може да се използва езиковата конструкция isset().


Променливи
PHP Manual