PHP中的静态函数


static function in PHP

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

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