У меня вопрос относительно статической функции в php.
предположим, что у меня есть класс
class test {
public function sayHi() {
echo 'hi';
}
}
если я сделаю test::sayHi();
это работает без проблем.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
тоже работает.
В чем разница между первым и вторым классом?
Что особенного в статической функции?
Ответы:
В первом классе
sayHi()
это фактически метод экземпляра, который вы вызываете как статический метод, и вам это сходит с рук, потому чтоsayHi()
никогда не ссылается на$this
.Статические функции связаны с классом, а не с экземпляром класса. Таким образом,
$this
недоступен из статического контекста ($this
не указывает на какой-либо объект).источник
Просто статические функции функционируют независимо от класса, к которому они принадлежат.
$ это означает, что это объект этого класса. Это не относится к статическим функциям.
источник
Вся разница в том, что вы не попадаете
$this
внутрь статической функции. Если вы попытаетесь использовать$this
, вы получите файлFatal error: Using $this when not in object context
.Хорошо, хорошо, еще одно отличие: в
E_STRICT
вашем первом примере создается предупреждение.источник
$this
относится к текущему объекту. В статической функции нет текущего объекта; функция существует в классе без необходимости или ссылки на экземпляр объекта этого класса.Статический вызов нестатических методов генерирует предупреждение уровня E_STRICT.
источник
Короче говоря, у вас нет объекта как $ this во втором случае, поскольку статический метод - это функция / метод класса, а не экземпляр объекта.
источник
Попробовав примеры (PHP 5.3.5), я обнаружил, что в обоих случаях определения функций вы не можете использовать
$this
оператор для работы с функциями класса. Так что я пока не мог найти в них разницы. :(источник