我有一個父類和一小撮擴展該父類的子元素。PHP:爲什麼我無法更新父類的受保護屬性?
我想要做的是設置擴展到父項的子項的一些屬性。
下面是一個例子。
class Activity {
protected static $activity;
protected static $data_sql;
protected static $field_prefix;
protected static $field_names;
//gets the data on a specific activity
public function get_data() {
$data = \DB::selectOne(self::$data_sql, [':id' => self::$activity['id']], \PDO::FETCH_ASSOC);
return $this->format_data($data);
}
}
class Post extends Activity {
protected static $activity;
protected static $data_sql = "SELECT * FROM post_activity_data WHERE activity_id = :id";
protected static $field_prefix = 'post_';
protected static $field_names = [
//set a handful of items
];
public function __construct($activity) {
self::$activity = $activity;
}
}
$data = new activity\Post($activity);
$new_data = $data->get_data();
在Post
,它擴展Activity
,但是當我運行get_data
它不使用在子類中的變量,而是試圖從Activity
使用空變量。
我在這裏錯過了什麼來正確地做到這一點?
見文獻[延遲靜態綁定(http://php.net/manual/en/language.oop5.late-static-bindings.php) – Federkun
嗯,這是完美的。正如我期待的那樣工作。謝謝! –