搜尋

首頁  >  問答  >  主體

PHP 靜態方法怎麼呼叫父類別非靜態方法?

1、this呼叫父類別方法:

#2、self呼叫父類別方法:

#3、parent呼叫父類別方法:

#難道子類別靜態方法沒有辦法呼叫父類別非靜態方法嗎?

#
淡淡烟草味淡淡烟草味2754 天前1093

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-06-08 11:03:40

    self::get_one_by_sql

    回覆
    0
  • 为情所困

    为情所困2017-06-08 11:03:40

    先確定下父類別的get_one_bysql 是不是靜態的

    關於使用 https://stackoverflow.com/que...

    回覆
    0
  • 迷茫

    迷茫2017-06-08 11:03:40

    你這麼用的顯然很不規範, 當然先說正題.
    要調父類的非靜態方法, 首先你得取到類實例
    如果有緩存就直接拿, 沒有就創建一個

    $instance = new self();
    $totalCount = $instance->get_one_bysql($sqlstr);

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-08 11:03:40

    呼叫不了.

    非靜態方法需要有$this物件, 從靜態方法呼叫提供不了這個物件.

    回覆
    0
  • 滿天的星座

    滿天的星座2017-06-08 11:03:40

    打開註解玩玩就知道了

    <?php
    class a{
        public $ab = NULL;
        public function d(){
            var_dump($this->ab);
        }
        public function c($a,$b){
            var_dump($a+$b);
        }
    }
    
    class b extends a{
        public static function t(){
            // $this->d();          //Fatal error: Using $this when not in object context in D:\phpStudy\WWW\index.php on line 14
            // $this->c(1,2);          //Fatal error: Using $this when not in object context in D:\phpStudy\WWW\index.php on line 15
            // self::d();             //Strict Standards: Non-static method a::d() should not be called statically in D:\phpStudy\WWW\index.php on line 16
                                    //Fatal error: Using $this when not in object context in D:\phpStudy\WWW\index.php on line 5
            // self::c(1,2);        //Strict Standards: Non-static method a::c() should not be called statically in D:\phpStudy\WWW\index.php on line 18 
                                    // int(3)
            // parent::d();            //Strict Standards: Non-static method a::d() should not be called statically in D:\phpStudy\WWW\index.php on line 20
                                    // Fatal error: Using $this when not in object context in D:\phpStudy\WWW\index.php on line 5
            // parent::c(1,2);        //Strict Standards: Non-static method a::c() should not be called statically in D:\phpStudy\WWW\index.php on line 22
                                    //int(3)
        }
    }
    b::t();

    總結:this用於實例呼叫。 self,parent用於呼叫靜態屬性或方法。
    最後一個奇特的現像是雖然靜態呼叫父類別的非靜態方法處理數據,會得到一個報錯,但是還是輸出了int(3)

    回覆
    0
  • 取消回覆