代码之家  ›  专栏  ›  技术社区  ›  ZZ Coder

PHP中类的非静态函数访问

  •  3
  • ZZ Coder  · 技术社区  · 15 年前

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

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

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

    5 回复  |  直到 15 年前
        1
  •  5
  •   mozillalives    15 年前

    我认为这是因为向后兼容性。在php4中,您没有方法的静态关键字(仍在查找引用,但到目前为止,这是我找到的全部内容 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=34990 http://bugs.php.net/bug.php?id=47891 .

        2
  •  6
  •   Mike B    15 年前

    这是合法的,但在你提到之前,一般都不赞成。 $this 在静态调用的方法中,该方法将引发致命错误。

        3
  •  2
  •   Alix Axel    15 年前

    PHP Manual :

    静态调用非静态方法 生成E_严格级别警告。

        4
  •  0
  •   shufler    15 年前

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

        5
  •  -2
  •   Steven Smethurst    15 年前

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