Статические свойства в PHP
Доступ к статическим свойствам, как и к статическим методам, не предполагает создание объекта.
Статические свойства
Доступ к статическим свойствам осуществляется так же, как и к статическим методам. Применяются те же правила видимости.
Статические свойства объявляются с применением ключевого слова static
:
Синтаксис
<?php
class ClassName {
public static $staticProp = 'Привет мир!';
}
}
?>
Для доступа к статическому свойству используется имя класса и двойное двоеточие (::)
за которыми следует имя свойства:
Синтаксис
<?php
ClassName::staticProp;
?>
Рассмтрим на примере как плучить доступ к статическому свойству:
Пример
Попробуй сам »<?php
class ailera {
public static $value = 2.71828;
}
// Получить статическое свойство
echo ailera::$value;
?>
Результат выполнения кода:
В рассмотренном примере мы объявляем статическое свойство: $value
. Затем мы вызываем статическое свойство, используя имя класса, двойное двоеточие (::)
и имя свойства (без предварительного создания класса).
У класса могут быть как статические, так и нестатические свойства. Таким же образом, как мы использовали ключевое слово $this
для доступа к собственным свойствам класса изнутри класса, мы используем зарезервированное ключевое слово self
и двойное двоеточие (::)
, чтобы получить доступ к статическому свойству из метода того же класса:
Пример
Попробуй сам »<?php
class ailera {
public static $value = 2.71828;
public function staticValue() {
return self::$value;
}
}
$ailera = new ailera();
echo $ailera->staticValue();
?>
Результат выполнения кода:
Чтобы получить доступ к статическому свойству из дочернего класса, используйте ключевое слово parent
внутри дочернего класса:
Пример
Попробуй сам »<?php
class ailera {
public static $value = 2.71828;
}
class docheclass extends ailera {
public function mathStatic() {
return parent::$value;
}
}
// Получить значение статического свойства напрямую через дочерний класс
echo docheclass::$value;
echo "<br>";
// или получить значение статического свойства с помощью метода mathStatic()
$docheclass = new docheclass();
echo $docheclass->mathStatic();
?>
Результат выполнения кода:
2.71828
Когда использовать static?
Использование статических свойств и методов считается плохой практикой. Однако, в некоторых случаях бывает выгодно использовать свойство или метод без необходимости создания объекта. В следующем примере будем использовать статические свойства в качестве счетчиков, поскольку они могут сохранять последнее присвоенное им значение. Например, метод addToCars()
добавляет 1
к свойству $numberOfCars
каждый раз при вызове метода:
Пример
Попробуй сам »<?php
class Utilis {
// Удерживает количество машин
static public $numberOfCars = 0;
// Добавляем 1 к количеству автомобилей при каждом вызове метода
static public function addToCars() {
self::$numberOfCars++;
}
}
echo Utilis::$numberOfCars;
echo "<br>";
Utilis::addToCars();
echo Utilis::$numberOfCars;
echo "<br>";
Utilis::addToCars();
echo Utilis::$numberOfCars;
echo "<br>";
Utilis::addToCars();
echo Utilis::$numberOfCars;
?>
Результат выполнения кода:
1
2
3
Заключение
Всякий раз, когда вы используете static
, обязательно используйте его для служебных программ, а не из соображений удобства, потому что они удобны и к ним можно подойти без необходимости сначала создавать объект.
Статические методы и свойства представляют коду глобальные объекты, к которым можно обращаться откуда угодно. Это то, чего мы, как разработчики, должны стараться избегать в своих сценариях.
В этом руководстве вы узнали, как и когда использовать статические методы и свойства, и почему вы должны использовать их с большой осторожностью. Кликните здесь, чтобы попрактиковаться в предмете.