0

我正在尝试向我的每个类添加一个静态成员,其中包含它们在实例化时应该使用的默认数据库连接。这是我正在尝试的方法:

<?php //other classes extend Generic
class Generic {
    public static $defaultDatabase;
    public $db;

    function __construct (&$pDatabase = null){
        if ($pDatabase!==null)
            $this->db = &$pDatabase;
        else
            $this->db = &$defaultDatabase;
    }   
}
?>


<?php
include_once("/classes/class.Database.php");
$db = new Database ("localhost", "username", "password", "TestDatabase");

$classes = array("Generic", "Member");
foreach ($classes as $class){
    include_once("/classes/class.$class.php");
    $class::defaultDatabase = &$db;//throws error here, unexpected "="
}

?>

我究竟做错了什么?有没有更好的方法来做到这一点,还是我必须为每个类单独设置 defaultDatabase?我正在使用 php 5.3,我知道它应该支持这样的东西。

4

2 回答 2

1

用于self::$propertyName访问静态属性

function __construct (&$pDatabase = null){
    if ($pDatabase!==null)
        $this->db = &$pDatabase;
    else
        $this->db = self::$defaultDatabase;
} 

另请注意,如果是对象,则使用引用运算符&$var是没有意义的。$var这是因为 PHP 中的所有对象实际上都是引用。

于 2013-04-21T23:19:17.670 回答
1

在这段代码中

 $class::defaultDatabase = &$db

您应该在 defaultDatabase 之前添加 $,因为静态属性是通过

ClassName::$staticProperty

与其他通过以下方式访问的不同

$class->property;

于 2013-04-21T23:24:58.780 回答