2016-05-02 16 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は本当に単純なクラスです:getT関数へ

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

はコール:

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

$search = new Search;

ので、同様:

は、単にあなたの検索オブジェクトをインスタンス化 - > GET(「キーワード/ T」); ')私はそうでなければ私の質問 –

+0

@MarkBakerを失敗し、書かれた –

+0

を編集した –

答えて

1

内のメソッドを静的に呼び出すと(Search::getT();)、__construct()メソッドを起動することはありません。

__construct()は、静的メソッド(Class::method();)を呼び出すときではなく、クラス($search = new Search;)のインスタンス生成時に発生します。唯一の1( `自己:: $の基本を返すと、それを呼び出して、あなたの`取得() `メソッドがある2つの必須の引数として

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

ありがとうございました! –

+0

いつでも:)喜んで助けました。 –

関連する問題