Кроме того, если вы попытаетесь использовать $this
в своем методе, например:
class t {
protected $a = 10;
public function tt() {
echo $this->a;
echo 1;
}
}
t::tt();
При статическом вызове нестатического метода вы получите фатальную ошибку:
Fatal error: Using $this when not in object context in ...\temp.php on line 11
т.е. ваш пример немного слишком простой и не соответствует реальному случаю; -)
Также обратите внимание, что ваш пример должен получить строгое предупреждение ( цитата ):
Статический вызов нестатических методов
генерирует предупреждение уровня E_STRICT
.
И это действительно (по крайней мере, с PHP 5.3) :
Strict Standards: Non-static method t::tt() should not be called statically in ...\temp.php on line 12
1
Итак: не очень хорошо; -)
Тем не менее, статический вызов нестатического метода не выглядит хорошей практикой (возможно, именно поэтому он вызывает строгое предупреждение) , поскольку статические методы не имеют того же значения, что и не статические: статические методы не ссылаются ни на один объект, в то время как нестатические методы работают с экземпляром класса, к которому они вызваны.
Еще раз: даже если PHP позволяет вам что-то делать (может быть по историческим причинам - например, совместимость со старыми версиями) , это не значит, что вы должны это делать!