0

如果我使用范围解析运算符调用公共函数,它不会给出任何错误。

 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();
4

3 回答 3

2
于 2012-08-29T10:22:46.210 回答
2

如果您激活严格的错误报告,您看到静态调用非静态方法的错误:

error_reporting(E_ALL | E_STRICT);

对于第二部分,您以非静态方式调用静态方法,这将起作用,因为手册中的段落讨论的是静态属性,而不是方法。如果它具有这样的属性,您将无法访问Parent_class::static_propertylike 。Parent_class->static_property

调用对象的静态方法可以正常工作,在这种情况下,这$var->只是Parent_class::.

于 2012-08-29T10:24:36.003 回答
0

在你的代码之前试试这个:

error_reporting(E_ALL | E_STRICT);
于 2012-08-29T10:23:44.600 回答