Объявление свойств или методов класса как статических делает их доступными без необходимости создания экземпляра класса. К свойству, объявленному как статическое, нельзя получить доступ с помощью экземпляра объекта класса (хотя статический метод может).
Для совместимости с PHP 4, если не используется объявление видимости, свойство или метод будут обрабатываться так, как если бы они были объявлены как публичные.
Поскольку статические методы могут вызываться без экземпляра созданного объекта, псевдопеременная $ this недоступна в методе, объявленном как static.
Статические свойства не могут быть доступны через объект с помощью оператора стрелки ->.
При вызове нестатических методов статически генерируется предупреждение об уровне E_STRICT.
Как и любая другая статическая переменная 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"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";