Я делаю учебник 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
Я искал в сети, но не могу найти хорошее объяснение, почему этот код работает?
пожалуйста, объясни.
Когда я запускаю его с сообщением об ошибке 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, Класс распознается, потому что функция была вызвана внутри класса.
Других решений пока нет …