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