Что делает ключевое слово 'var' в PHP и зачем оно нужно?
Ключевое слово var в PHP: история и современное использование
Вы совершенно правы — var действительно является устаревшим синонимом для public в контексте объявления свойств класса. Давайте разберемся подробнее.
Исторический контекст
Когда в PHP 4 появились классы (объектно-ориентированное программирование), модификаторов доступа public, private и protected еще не существовало. Единственным способом объявить свойство класса было использование ключевого слова var. Все свойства, объявленные через var, были общедоступными — как public в современных версиях.
В PHP 5 (вышел в 2004 году) добавили полноценную поддержку модификаторов доступа, и var был объявлен устаревшим (deprecated). Однако разработчики PHP решили не удалять его полностью для обратной совместимости. В PHP 7 и 8 var по-прежнему работает, но его использование не рекомендуется.
Что делает var сейчас?
Начиная с PHP 5.0.0 и до текущих версий, var эквивалентен public. То есть:
class Example {
var $property = 'value'; // То же самое, что:
public $property = 'value';
}
Оба варианта создают общедоступное свойство, к которому можно обращаться из любого места программы.
Почему не стоит использовать var?
- Устаревший синтаксис — код выглядит как из PHP 4, что может ввести в заблуждение других разработчиков.
- Отсутствие гибкости — вы не сможете сделать свойство приватным или защищенным, не переписывая код.
- Стандарты кодирования — современные фреймворки (Laravel, Symfony) и PSR-стандарты рекомендуют использовать явные модификаторы доступа.
- IDE и анализаторы кода — многие инструменты могут выдавать предупреждения при использовании
var.
Примеры для наглядности
Вот как выглядит современный код с правильным использованием модификаторов доступа:
class User {
public $name; // Доступно всем
private $email; // Только внутри класса
protected $role; // Внутри класса и в наследниках
public function __construct($name, $email, $role = 'user') {
$this->name = $name;
$this->email = $email;
$this->role = $role;
}
public function getEmail() {
return $this->email; // Приватное свойство — только через геттер
}
}
А это устаревший вариант с var:
class User {
var $name;
var $email;
var $role;
function __construct($name, $email, $role = 'user') {
$this->name = $name;
$this->email = $email;
$this->role = $role;
}
}
Во втором случае все свойства общедоступны — вы не можете контролировать доступ к ним. Например, кто-то может случайно изменить $email на некорректное значение напрямую, минуя валидацию.
Исключение: множественное объявление
Интересный факт: var позволяет объявлять несколько свойств в одной строке без указания модификатора для каждого, но это скорее синтаксический сахар:
class Test {
var $a, $b, $c; // Все три — public
// Аналог:
public $a, $b, $c;
}
Вывод
Используйте var только если вы поддерживаете очень старый код на PHP 4. Во всех остальных случаях применяйте public, private или protected. Это сделает ваш код более понятным, безопасным и соответствующим современным стандартам PHP.
Дополнение: а как же типизация свойств?
Стоит также отметить, что var не поддерживает объявление типов свойств, которое появилось в PHP 7.4. Если вы используете современный PHP, вы можете (и должны) указывать тип для каждого свойства:
class User {
public string $name; // Тип string
private string $email; // Тип string
protected int $roleId; // Тип int
// А вот с var указать тип нельзя:
// var string $name; // Синтаксическая ошибка!
}
PHP 8.0 и 8.1 добавили еще больше возможностей: union-типы, mixed, readonly-свойства. Все это доступно только при использовании современных модификаторов доступа.
Если вы пишете новый проект — забудьте о var. Если встретили его в чужом коде — воспринимайте как маркер того, что код писался очень давно или неопытным разработчиком. При рефакторинге смело меняйте var на public — это абсолютно безопасно и никак не повлияет на работу кода.