0

假设我有两个类:SuperObject 和 PageGenerator。

PageGenerator(和一堆其他类)继承了 SuperObject 并且 SuperObject 有一个名为 'db_conn' 的字段用于数据库连接。

所以我的代码看起来像:

class SuperObject {
    protected static $db_conn = null;
    public function __construct($db){ $this->db_conn = $db; }
}
class PageGenerator extends SuperObject {
     public function some_function(){
         //something using parent::$db_conn;
     }
 }
 // somewhere down the way
$so = new SuperObject( $db_object );
$page = new PageGenerator();
$page->some_function();

但我认为我不能那样做,至少,不能那样做。

那怎么办?

4

2 回答 2

0

您可以使用父级受保护的静态字段:

public function some_function(){
     var_dump(self::$db_conn); //not parent::$db_conn;
}

但是您没有在 SuperObject 中正确初始化它。将 $this->db_conn 替换为self::$db_conn

class SuperObject {
    protected static $db_conn = null;
    public function __construct($db){ self::$db_conn = $db; }
}
于 2013-10-20T19:17:46.540 回答
0
class SuperObject {
    protected static $db_conn = null;
    public function __construct($db){ self::$db_conn = $db; }
}
class PageGenerator extends SuperObject {
    public function some_function(){
        var_dump(self::$db_conn);
    }
}
// somewhere down the way
$page = new PageGenerator( new \stdClass() );
$page->some_function();
于 2013-10-20T19:18:42.693 回答