PHP中的静态函数

时间:2012-08-29 10:18:56

标签: 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();

3 个答案:

答案 0 :(得分:2)

无法通过对象访问静态属性,但不能访问静态方法。

来自doc

  

将类属性或方法声明为静态可使它们可访问   无需实例化类。声明为的财产   使用实例化的类对象无法访问static(虽然   静态方法可以)。

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