これが少し複雑であることを事前にお詫び申し上げます。もしそうでなければ、私はその質問を考えていないかもしれません. 特定のコアクラスを拡張できるプラットフォームを使用していますが、他のクラスは拡張できませんが、一連のイベントのために、親メソッド全体を消去せずに拡張クラスからの変更を適用できるかどうかわかりません(これは避けたいです) )。関連する一連のクラスの単純化されたバージョンを次に示します。
メイン ビュー クラス (拡張可能):
<?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
場合、親が非静的に呼び出すときに、変更された配列と出力が既にあるように、拡張メソッドからデータフェッチャーを静的に呼び出す同等の方法がありますか (またはこの場合、出力ではありません) 変更された配列メンバー?