如果我使用范围解析运算符调用公共函数,则不会给出任何错误。
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();
答案 0 :(得分:2)
答案 1 :(得分:2)
如果激活严格的错误报告,将看到错误地静态调用非静态方法:
error_reporting(E_ALL | E_STRICT);
对于第二部分,您非静态地调用静态方法,这将起作用,因为手册中的段落讨论静态 属性 ,而不是方法。如果Parent_class::static_property
具有此类属性,则无法访问Parent_class->static_property
。
调用对象的静态方法可以正常工作,在这种情况下,$var->
只是Parent_class::
的简便方法。
答案 2 :(得分:0)
在您的代码之前尝试此操作:
error_reporting(E_ALL | E_STRICT);