2016-05-02 79 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

任何时候:)很高兴它帮助。 –

相关问题