搜索

首页  >  问答  >  正文

为什么php 可以通过 :: 直接调用类的非静态方法 ?

代码如下:

<?php

class Demo
{
    public function testing()
    {
        echo "testing\n";
    }
}

Demo::testing();

php7.0 执行输出:

$ php demo.php 
testing

php5.6 执行输出

$ php demo.php
PHP Strict Standards:  Non-static method Demo::testing() should not be called statically in /home/runner/Code/funny/demo.php on line 11

testing

还有这种操作 ?? 原理是啥 ??

滿天的星座滿天的星座2787 天前596

全部回复(7)我来回复

  • 大家讲道理

    大家讲道理2017-06-10 09:49:28

    http://www.laruence.com/2012/...

    哈哈哈,感谢大家回答. 具体原因看上面鸟哥这篇文章吧

    回复
    0
  • 高洛峰

    高洛峰2017-06-10 09:49:28

    5.6 版本以下的 类假如无需实例化而直接调用方法与属性,该方法和属性必须是静态方法,即Demo类要直接调用testing方法,testing必须 public static function testing() { }。不然就会报错。
    我不知道7.0以上是不是可以无需声明

    回复
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-10 09:49:28

    看到了, 只是 php-cli 会执行, 在php-fpm 还是不会

    Deprecated: Non-static method Demo::testing() should not be called statically in test.php on line 11
    
    testing

    回复
    0
  • 某草草

    某草草2017-06-10 09:49:28

    虽然这样是可以使用的,但是也不建议这么做。

    回复
    0
  • 習慣沉默

    習慣沉默2017-06-10 09:49:28

    php7.0是可以这么写的,但是php5.6肯定不可以,写成self::testing也是可以的

    回复
    0
  • 大家讲道理

    大家讲道理2017-06-10 09:49:28

    __callStatic()

    回复
    0
  • 学习ing

    学习ing2017-06-10 09:49:28

    可以认为是PHP的实现不严谨.

    如果非static方法里面没有使用$this, 可以用::调用.

    回复
    0
  • 取消回复