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