搜尋

首頁  >  問答  >  主體

為什麼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

還有這種操作 ?? 原理是啥 ??

滿天的星座滿天的星座2731 天前547

全部回覆(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
  • 取消回覆