Работа с переменными в языке программирования PHP
Основы работы с переменными в PHP
Переменная в PHP представляет собой именованный контейнер для хранения данных. Наиболее распространённый способ объявления и инициализации переменной - использование оператора присваивания =. Имя переменной начинается с символа $, за которым следует идентификатор (буквы, цифры, знак подчёркивания, но не цифра в начале). Регистр символов в именах переменных учитывается.
<?php
$name = 'Иван'; // строка
$age = 25; // целое число
$height = 1.85; // число с плавающей точкой
$isStudent = true; // булево значение
$colors = array('red', 'green', 'blue'); // массив
$person = new stdClass(); // объект
$nothing = null; // null
echo "Привет, $name! Тебе $age лет.";
?>
использование php переменные (использование переменных php)
Привет, Иван! Тебе 25 лет.
Типичные ошибки:
- Использование необъявленной переменной - PHP генерирует warning (уровень E_WARNING), но значение интерпретируется как null.
- Ошибка синтаксиса при использовании недопустимых символов в имени (например, $first-name).
- Забывание символа
$перед именем - приводит к синтаксической ошибке.
Решение: всегда объявлять переменные перед использованием, применять проверку isset().
Как создать переменную, которая ссылается на другую?
Присваивание по ссылке позволяет двум именам указывать на одну и ту же область памяти. Для этого используется оператор & перед присваиваемой переменной.
<?php
$a = 10;
$b = &$a; // $b - ссылка на $a
$b = 20; // меняет значение и $a, и $b
echo "a = $a, b = $b";
?>
a = 20, b = 20
Проблема: неосторожное изменение ссылочной переменной может повлиять на исходную. Ссылки усложняют отслеживание данных. Рекомендуется применять только при необходимости (например, в циклах для модификации массива).
Как динамически создавать имена переменных?
Переменные переменные (variable variables) используют имя одной переменной как имя другой. Синтаксис: $$имя.
<?php
$varName = 'message';
$$varName = 'Привет, динамический мир!';
echo $message; // выводит "Привет, динамический мир!"
?>
Привет, динамический мир!
Ошибка: чрезмерное использование делает код нечитаемым. Безопасность: если имя переменной приходит из внешнего источника, возможна подмена. Лучше применять массивы вместо динамических имён.
Как передать переменную из глобальной области в функцию?
Внутри функции переменные по умолчанию локальны. Для доступа к глобальной используется ключевое слово global или суперглобальный массив $GLOBALS.
<?php
$globalVar = 'Глобальная';
function test() {
global $globalVar;
echo $globalVar;
// или: echo $GLOBALS['globalVar'];
}
test();
?>
Глобальная
Ошибка: использование global увеличивает связанность кода. Альтернатива - передача переменной как параметра функции. Статические переменные (static) сохраняют значение между вызовами.
Как проверить, определена ли переменная и не равна ли она null?
Функция isset() возвращает true, если переменная объявлена и её значение не null. empty() - также проверяет на пустые значения (0, '', false, array(), null). is_null() - только на null.
<?php
$var = 0;
var_dump(isset($var)); // true
var_dump(empty($var)); // true (0 считается пустым)
var_dump(is_null($var)); // false
$undefined;
var_dump(isset($undefined)); // false
?>
bool(true) bool(true) bool(false) bool(false)
Распространённая ошибка: путаница между isset() и empty(). Для точной проверки на null используйте is_null(). Удаление переменной - unset($var).
Как задать неизменяемое значение (константу)?
Константы в PHP определяются функцией define() или ключевым словом const (с PHP 5.3). Константы не имеют символа $ и не могут быть изменены после определения.
<?php
define('PI', 3.14159);
const SITE_NAME = 'MySite';
echo PI . ' - ' . SITE_NAME;
?>
3.14159 - MySite
Отличие от переменных: константы автоматически глобальны, не могут быть удалены, регистр по умолчанию чувствителен. Попытка переопределить константу вызывает ошибку.
Расширенные примеры работы с переменными
1. Использование list() для извлечения значений из массива
<?php
$info = array('Петр', 30, 'программист');
list($name, $age, $job) = $info;
echo "$name, $age лет, работает $job";
?>
Петр, 30 лет, работает программист
2. Функция compact() для создания ассоциативного массива из переменных
<?php
$city = 'Москва';
$country = 'Россия';
$data = compact('city', 'country');
print_r($data);
?>
Array
(
[city] => Москва
[country] => Россия
)
3. Функция extract() - обратная compact()
<?php
$arr = array('x' => 10, 'y' => 20);
extract($arr);
echo "x = $x, y = $y";
?>
x = 10, y = 20
Опасность: extract() может перезаписать существующие переменные. Рекомендуется использовать с флагом EXTR_SKIP.
4. Типизация с помощью declare(strict_types=1)
<?php
declare(strict_types=1);
function sum(int $a, int $b): int {
return $a + $b;
}
echo sum(5, 10); // 15
// echo sum(5, '10'); // Fatal error: Argument 2 must be int
?>
15
5. Переменные в heredoc и nowdoc
<?php
$name = 'Анна';
$heredoc = <<<EOT
Привет, $name!
Это heredoc, переменные подставляются.
EOT;
$nowdoc = <<<'EOT'
Привет, $name!
Это nowdoc, переменные не подставляются.
EOT;
echo $heredoc . "\n" . $nowdoc;
?>
Привет, Анна! Это heredoc, переменные подставляются. Привет, $name! Это nowdoc, переменные не подставляются.
6. Использование переменных в циклах с передачей по ссылке
<?php
$numbers = [1, 2, 3];
foreach ($numbers as &$value) {
$value *= 2; // модифицируем исходный массив
}
unset($value); // разрываем ссылку
print_r($numbers);
?>
Array
(
[0] => 2
[1] => 4
[2] => 6
)
После цикла с ссылкой переменная $value остаётся ссылкой на последний элемент. Её сброс через unset() предотвращает неожиданные побочные эффекты.