Static

Объявление членов или методов класса static делает их доступными без создания экземпляра класса. Член, объявленный static, не может быть доступен из объекта - экземпляра класса (хотя статический метод может).

Объявление static должно следовать после объявления типа видимости. Для совместимости с PHP4, при отсутствии объявления типа видимости, члены и методы работают, как public.

Поскольку методы static возможно вызывать без создания экземпляров объектов, псевдо-переменная $this недоступна внутри метода, объявленного как static.

Фактически вызовы статических методов совершаются во время компиляции. При использовании определенного имени класса метод уже полностью идентифицирован и не применяет правил наследования. Если вызов осуществляется посредством self, то self передается в текущий класс, то есть класс, которому принадлежит код. Здесь правила наследования также не применимы.

Доступ к статическим свойствам в объекте не может быть получен оператором ->.

Вызывающие не статические методы статически генерируют предупреждение уровня 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"; // Не определенное "Property" my_static

// $foo::my_static невозможно
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>

Пример метода Static

<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}

Foo::aStaticMethod();
?>