2016-05-02 2 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 ('Самовозврат :: $ Основы -> 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

Любое время :) Рад, что это помогло. –

Смежные вопросы