function — вызов нестатического метода без создания объекта прекрасно работает в переполнении стека

Я делаю учебник PHP, и я нашел этот код

Class Insurance
{
function clsName()
{
echo get_class($this)."\n";
}
}$cl = new Insurance();
$cl->clsName();
Insurance::clsName();

Вот function clsName() доступ без создания экземпляра Insuarance

Insurance::clsName();

Но из определения

Оператор разрешения области (также называемый Paamayim Nekudotayim) или в
Проще говоря, двойное двоеточие, это токен, который позволяет получить доступ к
статические, постоянные и переопределенные свойства или методы класса.

При ссылке на эти элементы вне определения класса используйте
Название класса.

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

Я искал в сети, но не могу найти хорошее объяснение, почему этот код работает?
пожалуйста, объясни.

0

Решение

Когда я запускаю его с сообщением об ошибке E_ALL:

Insurance
<br />
<b>Strict Standards</b>:  Non-static method Insurance::clsName() should not be called statically in <b>[...][...]</b> on line <b>12</b><br />
<br />
<b>Notice</b>:  Undefined variable: this in <b>[...][...]</b> on line <b>5</b><br />
Insurance

Теперь вопрос, почему это все еще работает? как видите, «Страхование» отображалось.

Когда вы делаете echo get_class($this)."\n"; когда вы вызываете в статическом контексте, PHP будет запускать его как echo get_class(null)."\n";,

И если вы читаете поведение get_class http://php.net/manual/en/function.get-class.php, Класс распознается, потому что функция была вызвана внутри класса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]