对非对象上的成员函数get的调用


Call to a member function get on a non-object

我有这个类:

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';
    }
}

但是,当我在类Search中运行函数getT时,它返回以下错误:Call to a member function get() on a non-object

我能做什么?

您正在静态调用SearchSearch::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';
    }
}