我一直在研究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