Php 获取父类';子类中的s字段
假设我有两个类:SuperObject和PageGenerator PageGenerator(和其他一些类)继承SuperObject,SuperObject有一个名为“db_conn”的字段用于数据库连接 所以我的代码看起来像:Php 获取父类';子类中的s字段,php,Php,假设我有两个类:SuperObject和PageGenerator PageGenerator(和其他一些类)继承SuperObject,SuperObject有一个名为“db_conn”的字段用于数据库连接 所以我的代码看起来像: class SuperObject { protected static $db_conn = null; public function __construct($db){ $this->db_conn = $db; } } class Pa
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();
但我想我不能那样做,至少,不是那样的
那么该怎么办呢?您可以使用受父级保护的静态字段:
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; }
}
但这需要我在类内部调用父类的构造函数,我想避免这种情况。哇,成功了。这样做有什么坏处吗?只是,您必须记住,静态属性是类属性,而不是对象。这意味着,若要在某个实例中更改静态属性的值,那个么每个类实例的静态属性的值都会更改。
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();