我试图通过在模型上使用静态方法来折射我的代码,但是我失去了获取Database对象的能力。
<?php
$Database = new PDO(.....);
class MyModel{
public static function getSomething(){
$test = $Database->somePDOStuff(..);
...
}
}
echo MyModel::getSomething();
?>
这是一个非常基本的例子,但是MyModel在这里并不知道$ Database。
有关如何让他们相互了解的任何想法吗?
答案 0 :(得分:1)
在课程方法中使用global
public static function getSomething(){
global $Database;
$test = $Database->somePDOStuff(..);
//....
}
但是,我会考虑避免这种做法。为什么不将$ dabase设为Database类或MyModel类的静态变量?
更好的是,您可以通过将其传递到函数中来设置一些旧的注入,如:
echo MyModel::getSomething($Database);
答案 1 :(得分:1)
$Database
超出了您的类和函数的范围。考虑将代码更改为更像这样的内容(如下所示)。您将PDO
对象发送给该函数,以便它可以访问它。
<?php
$Database = new PDO(.....);
class MyModel{
public static function getSomething(PDO $pdo){
$test = $pdo->somePDOStuff(..);
...
}
}
echo MyModel::getSomething($Database);
?>
这是另一种解决方案。在MyModel
内设置静态PDO对象。我不建议使用这个解决方案,因为它非常混乱。看看最后的解决方案,它更像是我要去的方向
<?php
$Database = new PDO(.....);
class MyModel{
public static $pdo;
public static function getSomething(){
$test = self::$pdo->somePDOStuff(..);
...
}
}
MyModel::$pdo = $Database;
echo MyModel::getSomething();
?>
考虑让您的班级MyModel
包含在构造函数中创建的PDO
对象。
<?php
class MyModel{
private $pdo;
public function __construct() {
$this->setPdo(new PDO(.....));
}
public static function getSomething(){
$instance = new self();
$test = $instance->getPdo()->somePDOStuff(..);
...
}
public function setPdo(PDO $pdo) {
$this->pdo = $pdo;
}
public function getPdo() {
return $this->pdo;
}
}
echo MyModel::getSomething();
?>