我一直在研究PHP 5.3.x中跟随Active Record模式的一小组类。但是,在处理静态属性时,我遇到了一个问题。这里的代码位我一直在测试这个:一个类中的静态属性由另一个设置
<?php
class dbPreparedObject {
public static $insert = "";
public function __construct() {
static::$insert = "autoinsert_".get_called_class();
}
}
class gtRecord extends dbPreparedObject {}
class nRecord extends dbPreparedObject {}
$a = new gtRecord();
$b = new nRecord();
var_dump(gtRecord::$insert);
var_dump(nRecord::$insert);
输出:
string(18) "autoinsert_nRecord"
string(18) "autoinsert_nRecord"
但是,我想到的第一个字符串读autoinsert_gtRecord
。
似乎没有由子类实例化的静态属性被绑定在一起。如果没有在每个孩子课堂上申报public static $insert = ""
,有什么办法将他们分开?
我想我的问题是如何定义应该由类继承的属性,而无需在类声明中明确定义它们? – grobolom 2012-07-09 16:28:15
如果某个属性是公共的或受保护的,它将由任何子类继承,而不在子类中定义它们。 – drew010 2012-07-09 18:08:23
对我来说,看起来很奇怪,如果我在一个子类中正确地继承了一个继承,那么它会影响其他子类中的继承。为什么继承或不继承的子类的属性会影响父类? – grobolom 2012-07-09 18:39:21