PHP错误代码工作正常

Teb*_*ebe 5 php apache static object

我有以下代码:

 class A  {
   public function methodB() 
  {
    // do something
     return 1;
  }
 }


$a = A::methodB();
Run Code Online (Sandbox Code Playgroud)

它应该永远不会工作,它适用于该机器!它确实返回1.真的,我发誓我没有喝醉.

当然,如果我在我的机器或生产服务器上运行它将无法正常工作.因为你不能像静态那样调用非静态方法.应始终首先实例化类.

我很担心.想到今天,当我设置一个单独的工作机器来测试项目时,我再次获得了这个代码的环境.

事情变得更糟 - 我在团队中的开发人员仍然没有清楚地了解静态和非静态方法之间的差异.结果他们有代码在他们的机器上工作正常,但它在任何其他环境中失败.

为什么它有效?我希望这样的代码失败.它应该不起作用.

它运行的机器配置如下:

vagrant @ vagrant-ubuntu-trusty-32:/ var/www/apotheke $ php -v PHP 5.6.17-3 + deb.sury.org~trusty + 1(cli)Copyright(c)1997-2015 PHP Group Zend引擎v2.6.0,版权所有(c)1998-2015 Zend Technologies与Zend OPcache v7.0.6-dev,版权所有(c)1999-2015,作者:Zend Technologies

真的,我觉得很蠢.我错过了什么吗?

top*_*her 4

上面的代码在 PHP 5 中有效。来自文档

在 PHP 5 中,调用非静态方法会静态生成E_STRICT级别警告。

如果您打开严格错误报告,将输出如下警告:

PHP 严格标准:非静态方法 A::methodB() 不应在第 1 行的 php shell 代码中静态调用

请注意,该方法仍将运行并返回一个值。

它在 PHP 7 中已弃用,不建议使用。

在 PHP 7 中,静态调用非静态方法已被弃用,并且会生成警告E_DEPRECATED。将来可能会删除对静态调用非静态方法的支持。