如果我使用范围解析运算符调用公共函数,它不会给出任何错误。
class Parent_class
{
public function st_function()
{
echo "*************parent class************'n";
}
}
Parent_class:: st_function();
但在PHP.net上的PHP文档中,它给出了-静态调用非静态方法会生成E_STRICT级别的警告。此外,它还规定-静态属性不能使用箭头运算符通过对象访问->但它没有给出任何错误。有人能解释一下吗?
class Parent_class
{
public static function st_function()
{
echo "*************parent class************'n";
}
}
Parent_class:: st_function();
$var = new Parent_class();
$var->st_function();
静态属性不能通过对象访问,但不能通过静态方法访问。
来自文档。
将类属性或方法声明为静态可以访问它们而不需要类的实例化。声明为static不能用实例化的类对象访问(不过静态方法可以)。
如果您激活严格的错误报告,您将看到静态调用非静态方法的错误:
error_reporting(E_ALL | E_STRICT);
对于第二部分,在非静态调用静态方法时,这将起作用,因为手册中的段落讨论的是静态属性,而不是方法。如果Parent_class::static_property
具有这样的属性,则不能像Parent_class->static_property
那样访问它。
调用对象的静态方法很好,在这种情况下,$var->
只是Parent_class::
的一个方便简写。
在编写代码之前请尝试以下操作:
error_reporting(E_ALL | E_STRICT);