0

我正在做一个 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

我在网上搜索但找不到很好的解释为什么这段代码有效?请解释。

4

1 回答 1

1

当我运行它并报告错误时 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的行为,则可以识别该类,因为该函数是在类内部调用的。

于 2015-02-12T16:30:33.510 回答