【问题标题】:Access of Non-Static Function of a Class in PHPPHP中类的非静态函数的访问
【发布时间】:2009-11-17 21:54:58
【问题描述】:

为什么这在 PHP 中是合法的?

<?php
class Foo {
    public function test() {
        echo "hello\n";
    }
}

Foo::test();
?>

test() 是一个非静态函数,但我可以在没有实例的情况下访问它。

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    这是合法的,但通常不被接受,除非您在静态调用的方法中引用 $this,这将引发致命错误。

    【讨论】:

      【解决方案2】:

      我相信这是因为向后兼容。在 PHP4 中,您没有方法的 static 关键字(仍在寻找参考,但到目前为止,这就是我找到的所有 http://us2.php.net/manual/en/language.oop5.static.php)。这样,PHP4 代码仍然可以毫无问题地运行。

      最好这样声明您的静态函数,如果您打开 E_STRICT,您会看到关于此的通知。

      error_reporting(E_ALL | E_STRICT);

      更新:嗯,这是我找到的最好的 http://bugs.php.net/bug.php?id=34990http://bugs.php.net/bug.php?id=47891

      【讨论】:

        【解决方案3】:

        来自PHP Manual

        静态调用非静态方法 生成 E_STRICT 级别警告。

        【讨论】:

          【解决方案4】:

          这是因为您没有启用E_STRICT 错误级别。一旦启用 PHP 将停止让你这样做。

          【讨论】:

            【解决方案5】:

            我不相信你可以在没有对象实例的情况下访问类的方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-09-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-26
              • 1970-01-01
              相关资源
              最近更新 更多