2016-05-02 113 views
0

我有這個類:調用一個成員函數的非對象上得到

class Search 
{ 
    protected static $Basics; 

    public function __construct() { 
     self::$Basics = new Basics(); 
    } 

    public static function getT() { 
     return self::$Basics->get('keywords/t'); 
    } 

    public static function isAvailable($keyword) { 
     return self::$Basics->get('keywords/available', ['keyword' => $keyword])['available']; 
    } 
} 

Basics是非常簡單的類:

class Basics 
{ 
    public function __construct() 
    { 
     //some code.. 
    } 
    public function get($keyword, $param = null) 
    { 
     return ['available' => true]; 
    } 
} 

電話getT功能:

use App\Libraries\Search; 
class GV 
{ 
    public function test() { 
     echo Search::getT() ? 'ok' : 'bad'; 
    } 
} 

但是,當我運行功能getT在類Search,它返回此錯誤:Call to a member function get() on a non-object

我該怎麼辦?

+0

作爲你的'得到()'方法有2個強制性的參數,與調用它只有1('返回self :: $基礎 - > get('keywords/t');')將失敗 –

+0

@MarkBaker我編輯了我的問題 –

+0

否則,代碼沒有問題寫入 –

回答

1

你正在調用Search靜態的方法(Search::getT();),它永遠不會觸發__construct()方法。

__construct()在實例化類時觸發($search = new Search;),而不是調用靜態方法(Class::method();)。

簡單的實例化你的搜索對象:$search = new Search;

像這樣:

use App\Libraries\Search; 
class GV 
{ 
    public function test() { 
     $search = new Search; 
     echo $search::getT() ? 'ok' : 'bad'; 
    } 
} 
+0

非常感謝! –

+0

任何時候:)很高興它幫助。 –

相關問題