对于这有点令人费解,我提前道歉。如果不是这样,我可能不会考虑这个问题。我正在使用一个允许扩展某些核心类但不允许扩展其他核心类的平台,但由于事件的顺序,我不确定是否可以在不删除整个父方法的情况下应用扩展类的更改(我想避免)。这是所涉及的类链的简化版本:
主视图类(可扩展):
<?php
class ViewData {
function display($main_data, $sub_id) {
echo $main_data;
$sub_data = new ViewSubData($sub_id);
$sub_data->display();
}
}
辅助视图类(从上面的主类调用):
<?php
class ViewSubData {
function ViewSubData($id) {
$this->subdata = new SubData($id);
}
function display() {
print_r($this->subdata['data']);
}
}
辅助视图类的数据获取器:
<?php
class SubData {
function SubData($id) {
include("path/to/{$id}.php");
$this = $data_array["$id"];
}
}
提取的简化数据,作为包含的数组:
<?php
$data_array['xyz']['data']['fred'] = 'flintstone';
$data_array['xyz']['data']['barney'] = 'rubble';
$data_array['xyz']['data']['captain'] = 'caveman';
我用伪代码扩展了主类(上面的第一个),它会完成什么:
<?php
class MyViewData extends ViewData {
function display($main_data, $sub_id) {
// unset(ViewSubData::subdata['data']['fred']);
parent::display($main_data, $sub_id)
}
}
我已经阅读了有关后期静态绑定的文档,但仍然不清楚它什么时候工作,什么时候不工作,在这种情况下,它是否可以从一个点静态绑定多个深度。如果这不是后期静态绑定的目的,是否有一些等效的方法可以从扩展MyViewData::display
方法静态调用数据获取器,以便当父级非静态调用它时,它已经具有修改后的数组和输出(或在这种情况下,不输出)修改的数组成员?