W3docs

Работа с переменными в PHP

Узнайте, как создавать, проверять, копировать и удалять переменные в PHP: isset, gettype, settype, ссылки и динамические переменные.

Введение

Работа с переменными — это совокупность приёмов для создания, проверки, копирования и удаления значений, с которыми работает PHP-скрипт. Эта страница выходит за рамки простого присвоения значения: она охватывает проверку существования переменной (isset), определение и изменение её типа (gettype / settype), создание ссылок и более динамические возможности PHP — переменные переменные и переменные функции.

Если вы ещё никогда не объявляли переменные в PHP, начните с разделов Переменные PHP и Типы данных PHP, а затем вернитесь сюда для изучения приёмов работы с переменными.

Объявление и присвоение переменных

В PHP имя переменной начинается со знака доллара ($), за которым следует буква или символ подчёркивания. Тип указывать не нужно — PHP выводит его из значения, которое вы присваиваете с помощью оператора =.

<?php
$name  = "John";   // string
$age   = 30;        // integer
$price = 19.99;     // float
$active = true;     // boolean

PHP является динамически типизированным языком: одна и та же переменная может содержать строку сейчас и число позже. Переменная просто принимает тип того значения, которое было присвоено ей последним.

Интерполяция строк

Внутри строк в двойных кавычках (и heredoc) PHP заменяет переменную её значением. Строки в одинарных кавычках воспринимаются буквально и не поддерживают интерполяцию.

php— editable, runs on the server

Проверка и удаление переменных

Перед чтением переменной, которая может не существовать, проверьте её наличие. Три следующие функции являются основой безопасной работы с переменными:

ФункцияВозвращает true, если...
isset($var)переменная существует и не равна null
empty($var)переменная не установлена, равна null, 0, "", "0", false или []
unset($var)(нет возвращаемого значения) уничтожает переменную, после чего isset возвращает false
<?php
$user = null;
var_dump(isset($user));   // bool(false) — null counts as "not set"

$count = 0;
var_dump(empty($count));  // bool(true)  — 0 is "empty"

$temp = 10;
unset($temp);
var_dump(isset($temp));   // bool(false) — destroyed

isset — это защитная функция, к которой обращаются чаще всего, особенно при работе с суперглобальными переменными типа $_GET и $_POST, где ключ может отсутствовать.

Проверка и изменение типов

Поскольку PHP выводит типы автоматически, иногда нужно узнать, какой тип имеет значение в данный момент, или принудительно выполнить преобразование.

<?php
$price = 19.99;
echo gettype($price);     // double  (PHP's name for float)

$input = "42";
settype($input, "integer");
echo $input + 8;          // 50 — now a real integer, not the string "42"

Используйте gettype для получения удобочитаемого имени типа и settype (или приведение, например (int)) для преобразования на месте. Для сравнений предпочтительнее использовать функции с учётом типов: is_int(), is_string(), is_array() и подобные.

Продвинутые возможности работы с переменными

Когда основы усвоены, PHP предлагает ещё три динамических приёма. Используйте их осторожно — они мощные, но могут снизить читаемость кода.

Ссылки на переменные

Ссылка позволяет двум именам указывать на одно и то же значение. Присвоение выполняется с помощью =&, и любое изменение через одно имя будет видно через другое.

<?php
$count = 1;
$alias =& $count;   // $alias is now another name for $count
$alias = 5;
echo $count;        // 5 — changed through the reference

Ссылки особенно важны при передаче аргументов в функции по ссылке (function f(&$x)), что позволяет функции изменять переменную вызывающего кода.

Переменные переменные

Переменная переменная использует значение одной переменной как имя другой. Синтаксис $$ читает внутреннюю переменную для построения внешнего имени.

<?php
$var = "greeting";
$$var = "Hello";     // creates $greeting
echo $greeting;      // Hello

Это иногда удобно для динамических имён полей, но ассоциативный массив почти всегда будет понятнее и безопаснее.

Переменные функции

Если строковая переменная содержит имя функции, добавление () вызывает эту функцию динамически.

<?php
$fn = "strlen";
echo $fn("Hello World");   // 11

Это используется для простых таблиц диспетчеризации и обратных вызовов. Современный PHP обычно предпочитает вызываемые объекты первого класса или замыкания, но переменные функции по-прежнему допустимы и работают быстро.

Лучшие практики

  • Используйте осмысленные имена. $counter или $totalPrice гораздо лучше передают намерение, чем $x или $tmp.
  • Инициализируйте переменные перед использованием. Чтение неопределённой переменной вызывает предупреждение; задайте значение по умолчанию или используйте защиту с isset().
  • Избегайте глобальных переменных. Передавайте значения как аргументы функций или оборачивайте состояние в объекты вместо использования global. Смотрите Область видимости переменных, чтобы понять, почему изоляция области видимости важна.
  • Предпочитайте массивы переменным переменным. Их легче перебирать, отлаживать и анализировать.
  • Используйте объявления типов. Типизированные параметры (function setAge(int $age)) помогают обнаруживать ошибки на раннем этапе и делают код самодокументируемым.

Итоги

Работа с переменными в PHP — это не только присвоение значений: она включает проверку существования с помощью isset/empty, удаление значений с помощью unset, проверку и преобразование типов с помощью gettype/settype, а также динамические инструменты — ссылки, переменные переменные и переменные функции. Опирайтесь на простые и явные приёмы в повседневной работе, а динамические инструменты оставьте для тех редких случаев, когда они действительно необходимы.

Practice

Практика
В PHP, какие из следующих вариантов являются способами работы с переменными?
В PHP, какие из следующих вариантов являются способами работы с переменными?

Practice

Практика
В PHP, какие из следующих вариантов являются способами работы с переменными?
В PHP, какие из следующих вариантов являются способами работы с переменными?
Was this page helpful?