PHP依赖注入并从伞班延伸

我有一个数据库类,其中有一系列的功能,我建议从另一个类中访问这些功能的最佳做法是依赖注入。 我想要做的是让一个主类将数据库依赖关系“注入”到其中,然后其他类从这个类中扩展出来,例如用户,帖子,页面等。

这是注入数据库依赖项的主类。

class Main {

    protected $database;

    public function __construct(Database $db)
    {
        $this->database = $db;
    }
}

$database = new Database($database_host,$database_user,$database_password,$database_name);
$init = new Main($database);

然后,这是我试图扩展它的用户类。

class Users extends Main {

    public function login() {

        System::redirect('login.php');

    }

    public function view($username) {

        $user = $this->database->findFirst('Users', 'username', $username);

        if($user) {
            print_r($user);
        } else {
            echo "User not found!";
        }

    }

}

但是,无论何时试图为User类调用视图函数,我都会收到此错误致命错误:在不在对象上下文中时使用$ this。 这个错误是关于试图在Users类中调用$ this->数据库的。 我尝试初始化一个新的用户类,并将数据库传递给它,但无济于事。


当你使用call_user_func_array并且传递给它一个可调用的类时,这个可调用类由类的字符串名和类的方法的字符串名组成,它执行一个静态调用: Class::method() 。 您需要先定义一个实例,然后将该实例作为可调用对象的第一部分传递,如下所示:

class Test
{
    function testMethod($param)
    {
        var_dump(get_class($this));
    }
}

// This call fails as it will try and call the method statically
// Below is the akin of Test::testMethod()
// 'this' is not defined when calling a method statically
// call_user_func_array(array('Test', 'testMethod'), array(1));

// Calling with an instantiated instance is akin to $test->testMethod() thus 'this' will refer to your instnace
$test = new Test();
call_user_func_array(array($test, 'testMethod'), array(1));
链接地址: http://www.djcxy.com/p/82281.html

上一篇: PHP Dependency injection and extending from an umbrella class

下一篇: call injected object's method