Эта страница описывает использование ключевого слова static для определения статических методов и свойств. static также может использоваться для определения статических переменных и позднего статического связывания. Для получения информации о таком применении ключевого слова static обратитесь по вышеуказанным страницам.
Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. Свойство класса, объявленное как статическое, не может быть доступно посредством экземпляра класса (но статический метод может быть вызван).
В целях совместимости с PHP 4, если определение области видимости не используется, то свойство или метод будут обрабатываться так, как если бы он был объявлен как public.
Так как статические методы вызываются без создания экземпляра класса, то псевдопеременная $this недоступна внутри метода, объявленного как статический.
В PHP 5 вызов нестатических методов статически вызовет ошибку уровня
E_STRICT
.
В PHP 7 вызов нестатических методов статически объявлен устаревшим
и вызовет ошибку уровня E_DEPRECATED
. Поддержка вызова
нестатических методов статически может быть удалена в будущем.
Пример #1 Пример статического метода
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // Начиная с PHP 5.3.0
?>
Статические свойства не могут быть доступны через объект с помощью оператора "->".
Как и любая другая статическая переменная PHP, статические свойства могут инициализироваться только используя литерал или константу до PHP 5.6; выражения не допускается. В PHP 5.6 и более новых версиях применяются те же правила, что и для выражений const: возможны некоторые выражения, если они могут быть вычислены во время компиляциии.
Начиная с PHP 5.3.0, существует возможность ссылаться на класс используя переменную. Значение переменной в таком случае не может быть ключевым словом (например, self, parent и static).
Пример #2 Пример статического свойства
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Не определено свойство my_static
print $foo::$my_static . "\n"; // Начиная с PHP 5.3.0
$classname = 'Foo';
print $classname::$my_static . "\n"; // Начиная с PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>