2017-01-24 4 views
0

В РНР руководстве говорится, что Scope Resolution Operator(::) имеет следующую цельИспользование :: для нестатических методов?

The Scope Resolution Operator (also called Paamayim Nekudotayim) or in simpler terms, the double colon, is a token that allows access to static, constant, and overridden properties or methods of a class.

Теперь я просто наткнулся на учебник, который использовал двойное двоеточие, как это:

class A { 
    public function nice(){ 
    echo "hi"; 
    } 
} 

$A = new A; 
A::nice(); 

и выход на самом деле

hi

Но почему это не вызывает ошибку? Функция nice не является статическим методом и не отменяет метод. Неплохо ли использовать двойную двоеточие?

+4

Это потому, что вы не включили отчеты об ошибках ([демо] (https://3v4l.org/5DVZI)). Я боюсь. –

+1

Реакция также зависит от PHP-версии в PHP70: «Устаревший: нестатический метод foo :: bar() не следует называть статическим в' – JustOnUnderMillions

+0

@ ÁlvaroGonzález. Я действительно нашел это в книге PHP Master с сайта. – Adam

ответ

3

Он работает для обеспечения обратной совместимости с PHP 4, если сообщения об ошибках на вы получите предупреждение:

Strict Standards: Non-static method A::nice() should not be called statically

EDIT На самом деле, вы получите сообщение об ошибке в последних версиях, не предупредив.

+0

http://stackoverflow.com/questions/4684454/error-message-strict-standards-non-static-method-should-not-be-called-staticall – TecBrat

1

Это фактически возвращает Deprecation уведомление и это плохая практика:

PHP Deprecated: Non-static method A::nice() should not be called statically

Он не выдаст ошибку, потому что это не ссылки $this, поэтому этот метод может быть статическим или иначе.

Если бы вы пытаетесь ссылаться $this, вы получите следующее сообщение об ошибке:

Fatal error: Uncaught Error: Using $this when not in object context

Смежные вопросы