Присвоение переменных
Имя переменной может начинаться с буквы или нижнего подчёркивания «_».
Имена переменных регистрозависимы. Т.е. переменные $var и $Var , это две разные переменные.
В PHP доступно присвоение переменной через оператор ? (тернарный оператор).
$is_main = ($url == '/') ? true : false; // Код выше аналогичен $is_main = false; if ($url == '/') < $is_main = true; >
Значение переменной по умолчанию
С версии PHP 7.0 появился новый оператор ?? (null coalescing).
// если $_GET['page'] не существует или возвращает null, то присваивается "1" $current_page = $_GET['page'] ?? '1';
Можно указывать несколько условий.
// если не существует $page и $_GET['page'], то присваивается "1" $current_page = $page ?? $_GET['page'] ?? '1';
Для кода выше не обязательно проверять переменные $page и $_GET[‘page’] на существование. Если данных переменных нет, то код попытается присвоить значение, которое указано после оператора «??».
Для каждой переменной выделяется место в оперативной памяти. Если переменная уже не нужна, её рекомендуется удалять через функцию unset() , чтобы освободить память для других операций.
unset($var_name);
Обновлено: 01 ноября 2020
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
Переменные — Основы PHP
В этом уроке мы познакомимся с переменными и научимся работать с ними. Мы узнаем, зачем они нужны, как их создавать, использовать и менять. Еще разберемся, как работать с константами, и что такое heredoc-синтаксис.
Создаем переменную
Допустим, нам нужно напечатать на экран слово «Father!» два раза или даже пять раз. Эту задачу можно решить так:
print_r('Father!'); print_r('Father!');
В простом случае так и стоит поступить, но если слово «Father!» начнет использоваться чаще и в разных частях программы, то придется его везде повторять. Если нам понадобится изменить слово, то придется найти все места, где оно использовалось и выполнить необходимую замену. А можно поступить по-другому. Вместо копирования выражения достаточно создать переменную с этой фразой:
// greeting - переводится как приветствие $greeting = 'Father!'; print_r($greeting); print_r("\n"); print_r($greeting); // => Father! // => Father!
В строчке $greeting = ‘Father!’ значение ‘Father!’ присваивается переменной с именем $greeting . В PHP имена переменных начинаются со знака $. В итоге переменная указывает на данные, которые были в нее записаны.
Когда переменная создана, можно начать ее использовать.
Использование переменной
Переменная подставляется в те места, где раньше стояло наше слово. Во время выполнения интерпретатор доходит до строчки print_r($greeting); и подставляет вместо переменной ее содержимое, а затем выполняет код.
Для имени переменной используется любой набор допустимых символов, к которым относятся буквы английского алфавита, цифры, знак _ . При этом цифру нельзя ставить в начале. Имена переменных регистрозависимы, то есть имя hello и имя heLLo — это два разных имени, значит, это две переменные. Регистр в PHP имеет важное значение, не стоит забывать про него.
Количество создаваемых переменных не ограничено, большие программы содержат десятки и сотни тысяч имен переменных. Для удобства анализа программы переменные принято создавать как можно ближе к тому месту, где они используются.
Изменение переменной
Со временем внутри программы значения переменных могут изменяться:
// greeting - переводится как приветствие $greeting = 'Father!'; print_r($greeting); // => Father! $greeting = 'Mother!'; print_r($greeting); // => Mother!
Имя осталось тем же, но внутри другие данные. Переменные в PHP не требуют специального объявления. Вместо этого переменная объявляется при первом ее использовании в программе.
Никогда нельзя быть точно уверенным, что записано внутри переменной. Чтобы быть спокойным, нужно проанализировать код, который находится перед переменной. Этим занимаются разработчики во время отладки, когда пытаются разобраться, почему программа не работает или работает не так, как задумано.
Переменные меняются нечасто. Обычно их используют, чтобы хранить.
Ошибки при работе с переменными
Переменную нужно объявить до ее использования. Если сделать это позже, то программа не заработает:
print_r($greeting); $greeting = 'Father!'; // PHP Notice: Undefined variable: greeting in /private/var/tmp/index.php on line 3
Запуск программы выше завершается с ошибкой PHP Notice _ — это ошибка обращения. Она означает, что в коде используется имя (идентификатор), которое не определено. При этом в самой ошибке указан идентификатор переменой: greeting .
Также к ошибке могут привести опечатки при использовании переменной и во время ее объявления. Количество подобных ошибок уменьшается за счет использования правильно настроенного редактора. Такой редактор подсвечивает имена, которые используются без объявления, и предупреждает о возможных проблемах.
Константы
Разработчики часто работают с данными, которые никогда не меняются. Например, число π, которое всегда равно 3.14 и не может измениться.
Для обращения к подобным данным в PHP принято использовать константы:
const PI = 3.14; print_r(PI); // => 3.14
Создание константы отличается от создания переменной. Оно начинается с ключевого слова const и последующего имени константы. При этом знак доллара не нужен. Далее ей присваивается нужное значение.
Константы принято именовать буквами в верхнем регистре с _ в качестве разделителя. Константа тоже может использоваться в любом выражении. Единственное ограничение — константу нельзя изменить.
В PHP много встроенных констант, которые можно использовать в любом месте программы. Вот некоторые из них:
- PHP_VERSION — текущая версия PHP
- PHP_MAXPATHLEN — максимальная разрешенная длина имени файла
- PHP_INT_MAX — максимальное возможное значение целых чисел (integer)
Кроме обычных констант в PHP существует отдельная группа — магические константы. Их отличия заключаются в следующем:
- Магические константы невозможно определить самому, можно пользоваться только существующими
- Магические константы начинаются и заканчиваются символами __ (два подчеркивания)
- Магия заключается в том, что такие константы имеют одно и то же значение только в пределах определенной части программы
Последний пункт говорит о том, что существуют не очень постоянные константы, но их изменения регламентированы и на практике не вызывают проблем. К подобным константам относятся:
- __LINE__ — содержит текущую строку файла, в котором она используется
- __FILE__ — путь до текущего файла
- __DIR__ — путь до директории, в которой находится текущий файл
Heredoc
$str = print_r($str); // => Пример строки, // => охватывающей несколько строк, // => с использованием heredoc-синтаксиса. // => Здесь не нужно экранировать ни одинарные ', ни двойные " кавычки.
Перед закрывающим идентификатором, в нашем случае — EOT , не должны стоять пробелы, иначе PHP начнет ругаться на ошибку синтаксиса.
Выводы
В этом уроке мы познакомились с переменными и научились работать с ними. Мы узнали, зачем они нужны, как их создавать, использовать и менять. Еще разобрались, как работать с константами. Это значения, которые никогда не меняются. При этом существуют не очень постоянные константы, но их изменения регламентированы и на практике не вызывают проблем.
Дополнительные материалы
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как присвоить значение переменной в php
Переменные в 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 было возможно косвенное присвоение (например, с использованием переменных переменных).
Подсказка
Для информации о функциях работы с переменными обращайтесь к разделу функций работы с переменными.
$var = ‘Боб’ ;
$Var = ‘Джо’ ;
echo » $var , $Var » ; // выведет «Боб, Джо»
?php
$ 4site = ‘ещё нет’ ; // неверно; начинается с цифры
$_4site = ‘ещё нет’ ; // верно; начинается с символа подчёркивания
$täyte = ‘mansikka’ ; // верно; ‘ä’ это (Расширенный) ASCII 228.
?>
По умолчанию переменные всегда присваиваются по значению. То есть, когда вы присваиваете выражение переменной, все значение оригинального выражения копируется в эту переменную. Это означает, к примеру, что после того как одной переменной присвоено значение другой, изменение одной из них не влияет на другую. Дополнительную информацию об этом способе присвоения смотрите в разделе Выражения.
PHP также предлагает иной способ присвоения значений переменным: присвоение по ссылке. Это означает, что новая переменная просто ссылается (иначе говоря, «становится псевдонимом» или «указывает») на оригинальную переменную. Изменения в новой переменной отражаются на оригинале, и наоборот.
Для присвоения по ссылке, просто добавьте амперсанд (&) к началу имени присваиваемой (исходной) переменной. Например, следующий фрагмент кода дважды выводит ‘ Меня зовут Боб ‘:
$foo = ‘Боб’ ; // Присваивает $foo значение ‘Боб’
$bar = & $foo ; // Ссылка на $foo через $bar.
$bar = «Меня зовут $bar » ; // Изменение $bar.
echo $bar ;
echo $foo ; // меняет и $foo.
?>?php
Важно отметить, что по ссылке могут быть присвоены только именованные переменные.
$foo = 25 ;
$bar = & $foo ; // Это верное присвоение.
$bar = &( 24 * 7 ); // Неверно; ссылка на неименованное выражение.
?php
function test ()
return 25 ;
>
Хорошей практикой считается инициализировать переменные, хотя в PHP это и не обязательное требование. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: булевы принимают значение false , целые числа и числа с плавающей точкой — ноль, строки (например, при вызове с конструкцией echo ) — пустую строку, а массивы становятся пустыми массивами.
Пример #1 Значения по умолчанию в неинициализированных переменных
// Неустановленная И не имеющая ссылок (то есть без контекста использования) переменная; выведет NULL
var_dump ( $unset_var );
?php
// Булевое применение; выведет ‘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); выведет ‘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/ru/reserved.classes.php)
// Выведет: 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() .
User Contributed Notes 5 notes
13 years ago
This page should include a note on variable lifecycle:
Before a variable is used, it has no existence. It is unset. It is possible to check if a variable doesn’t exist by using isset(). This returns true provided the variable exists and isn’t set to null. With the exception of null, the value a variable holds plays no part in determining whether a variable is set.
Setting an existing variable to null is a way of unsetting a variable. Another way is variables may be destroyed by using the unset() construct.
print isset( $a ); // $a is not set. Prints false. (Or more accurately prints ».)
$b = 0 ; // isset($b) returns true (or more accurately ‘1’)
$c = array(); // isset($c) returns true
$b = null ; // Now isset($b) returns false;
unset( $c ); // Now isset($c) returns false;
?>
is_null() is an equivalent test to checking that isset() is false.
The first time that a variable is used in a scope, it’s automatically created. After this isset is true. At the point at which it is created it also receives a type according to the context.
$a_bool = true ; // a boolean
$a_str = ‘foo’ ; // a string
?>
If it is used without having been given a value then it is uninitalized and it receives the default value for the type. The default values are the _empty_ values. E.g Booleans default to FALSE, integers and floats default to zero, strings to the empty string », arrays to the empty array.
A variable can be tested for emptiness using empty();
$a = 0 ; //This isset, but is empty
?>
Unset variables are also empty.
empty( $vessel ); // returns true. Also $vessel is unset.
?>
Everything above applies to array elements too.
$item = array();
//Now isset($item) returns true. But isset($item[‘unicorn’]) is false.
//empty($item) is true, and so is empty($item[‘unicorn’]
$item [ ‘unicorn’ ] = » ;
//Now isset($item[‘unicorn’]) is true. And empty($item) is false.
//But empty($item[‘unicorn’]) is still true;
$item [ ‘unicorn’ ] = ‘Pink unicorn’ ;
//isset($item[‘unicorn’]) is still true. And empty($item) is still false.
//But now empty($item[‘unicorn’]) is false;
?>
For arrays, this is important because accessing a non-existent array item can trigger errors; you may want to test arrays and array items for existence with isset before using them.
Как присвоить значение переменной в php
Базовый оператор присваивания обозначается символом «=». Кажется, что это оператор «равно». Это не так. Оператор присваивания означает, что левый операнд получает значение правого выражения (то есть левому операнду «будет присвоено значение»).
Результатом выполнения оператора присваивания будет само присвоенное значение. То есть, результат выполнения выражения « $a = 3 » будет равен 3. Это разрешает делать трюки наподобие:
$a = ( $b = 4 ) + 5 ; // Значение переменной $a равно 9, а переменной $b присвоено значение 4.
В дополнение к базовому оператору присваивания существуют «комбинированные операторы» для всех бинарных арифметических операций, операций объединения массивов и строковых операций, которые дают присвоить значение в выражении, а затем установить его значение в результат этого выражения. Например:
$a = 3 ;
$a += 5 ; // устанавливает для переменной $a значение 8, как если бы было написано: $a = $a + 5;
$b = «Привет» ;
$b .= «-привет!» ; // устанавливает переменной $b значение «Привет-привет!», как и $b = $b . «-привет!»;
Обратите внимание, что присвоение копирует оригинальную переменную в новую (присвоение по значению), поэтому следующие изменения одной из переменных никак не отразятся на другой. Это также может быть уместным при копировании чего-то вроде большого массива в длинном цикле.
Исключение из обычного для PHP способа присваивания по значению — объекты ( object ), которые присваиваются по ссылке. Принудительно скопировать объекты по значению можно через ключевое слово clone.
Присваивание по ссылке
Присваивание по ссылке тоже поддерживается, для этого можно использовать синтаксис $var = &$othervar; . Присваивание по ссылке означает, что обе переменные указывают на одни и те же данные и ничего никуда не копируется.
Пример #1 Assigning by reference
$a = 3 ;
$b = & $a ; // $b — это ссылка на переменную $a
print » $a \n» ; // печатает 3
print » $b \n» ; // печатает 3
$a = 4 ; // меняем переменную $a
print » $a \n» ; // печатает 4
print » $b \n» ; // также печатает 4, так как переменная $b — это ссылка на переменную $a,
// а значение переменной $a успело измениться
Оператор new автоматически возвращает ссылку, поэтому присваивание результата операции new по ссылке вызывает ошибку.
Результат выполнения этого примера:
Parse error: syntax error, unexpected 'new' (T_NEW) in …
Подробно о ссылках рассказано в разделе «Объяснение ссылок».
Операторы арифметического присваивания
| Пример | Эквивалент | Операция |
|---|---|---|
| $a += $b | $a = $a + $b | Сложение |
| $a -= $b | $a = $a — $b | Вычитание |
| $a *= $b | $a = $a * $b | Умножение |
| $a /= $b | $a = $a / $b | Деление |
| $a %= $b | $a = $a % $b | Модуль |
| $a **= $b | $a = $a ** $b | Возведение в степень |
Операторы побитового присваивания
| Пример | Эквивалент | Операция |
|---|---|---|
| $a &= $b | $a = $a & $b | Побитовое И |
| $a |= $b | $a = $a | $b | Побитовое ИЛИ |
| $a ^= $b | $a = $a ^ $b | Побитовое исключающее ИЛИ (Xor) |
| $a | $a = $a | Побитовый сдвиг влево |
| $a >>= $b | $a = $a >> $b | Побитовый сдвиг вправо |
Другие операторы присваивания
| Пример | Эквивалент | Операция |
|---|---|---|
| $a .= $b | $a = $a . $b | Конкатенация строк |
| $a ??= $b | $a = $a ?? $b | Объединение с Null |
Смотрите также
- Арифметические операторы
- Побитовые операторы
- Операторы объединения с null
User Contributed Notes 8 notes
12 years ago
Using $text .= «additional text»; instead of $text = $text .»additional text»; can seriously enhance performance due to memory allocation efficiency.
I reduced execution time from 5 sec to .5 sec (10 times) by simply switching to the first pattern for a loop with 900 iterations over a string $text that reaches 800K by the end.
8 years ago
Be aware of assignments with conditionals. The assignment operator is stronger as ‘and’, ‘or’ and ‘xor’.
$x = true and false ; //$x will be true
$y = ( true and false ); //$y will be false
?>
16 years ago
bradlis7 at bradlis7 dot com’s description is a bit confusing. Here it is rephrased.
echo $a , «\n» , $b ; ?>
outputs
Because the assignment operators are right-associative and evaluate to the result of the assignment
$a .= $b .= «foo» ;
?>
is equivalent to
$a .= ( $b .= «foo» );
?>
and therefore
$b .= «foo» ;
$a .= $b ;
?>
8 years ago
PHP uses a temporary variable for combined assign-operators (unlike JavaScript), therefore the left-hand-side (target) gets evaluated last.
Meaning:
$a = ($b + $c) + $a;
This can be important if the target gets modified inside the expression.
$a = 0;
$a += (++$a) + (++$a); // yields 5 (instead of 4)
25 days ago
In the case of the null coalescing assignment operator, even though the operator is right-associative just as the other assignment operators are, the left hand side is still tested first to see if it is already set or not. If it is, the right-hand side is not evaluated at all.
So if you try to be clever by writing something like
// If $local isn’t set use the $runtime value; if that’s not set,
// use $environment, and if that’s not set, use «default»; while
// setting $runtime and $environment to appropriate values
// for later reference.
$local ??= $runtime ??= $environment ??= «default» ;
?>
then the second assignment will not be evaluated if $local is already set (which means $runtime and hence $environment will be unaffected whether they are set or not).
To get the code to do what it looks like it’s doing, you’ll have to write the assignments separately:
$environment ??= «default» ;
$runtime ??= $environment ;
$local ??= $runtime ;
?>
If in this particular instance you didn’t *want* $runtime and $environment to be set to a (current or default) value, you can of course still write
$local ??= $runtime ?? $environment ?? «default» ;
?>
6 months ago
9 years ago
Document says:
«An exception to the usual assignment by value behaviour within PHP occurs with objects, which are assigned by reference in PHP 5. Objects may be explicitly copied via the clone keyword.»
But it’s not very accurate! Considering this code:
$a = new StdClass ;
$b = $a ;
$a = new StdClass ;
var_dump ( $a , $b );
?>
Output:
object(stdClass)#2 (0) >
object(stdClass)#1 (0) >
Note: #2 and #1 means two different objects.
But this code:
$a = new StdClass ;
$b = & $a ;
$a = new StdClass ;
var_dump ( $a , $b );
?>
Output will be:
object(stdClass)#2 (0) >
object(stdClass)#2 (0) >
Note: Still pointing to the same object.
And this shows that that exception is not valid, PHP assignment for objects still makes a copy of variable and does not creates a real reference, albeit changing an object variable members will cause both copies to change.
So, I would say assignment operator makes a copy of ‘Object reference’ not a real object reference.