2016-11-05 8 views
3

と仮定はサブクラスは親クラスと呼ばれているかどうかを検出

+0

'民間static'変数を示唆したよう

class Base { public function __construct() { $child = get_called_class(); if($child::$CHILD) { echo "Parent has being called"; } } } class Child extends Base { public static $CHILD = true; public function __constructor() { parent::__constructor(); } } $child = new Child(); 

別のアプローチは、debug_backtraceを使用するのでしょうか?それは 'private 'なので、アクセスまたはオーバーライドされません。 –

+0

[debug_backtrace](http://php.net/debug_backtrace)を見てみたいと思います。 Afaikは、関数/メソッド呼び出しがどこから来ているかを「検出」する唯一の方法です。 – icecub

+1

これを行う必要がある理由を説明すると役に立ちます。あなたがこれを行う必要がある場合、あなたのモデリングが少しオフかもしれないように説明がなければ少し音がするが、確かに良い理由があると確信している。 –

答えて

-1

私がいない私は、親クラスにサブクラスで親クラスが呼び出されたかどうかを検出することができます.How私はparent::__construct();と私のサブクラスの親クラスを呼び出します私はあなたの質問を理解しているかどうかを知るが、私の提案は親クラスget_called_classを使用して、前述の静的変数をテストし、その後子クラスでは、私の場合$CHILDには、trueの静的変数を設定することです。 @icecubは親」のコンストラクタからのみアクセス

+0

これは質問に答えますが、かなり悲惨なコード/デザインです。ベースクラスは、どのように拡張されているか、どのように拡張されているか、どのように拡張されているのかを考慮してはなりませあなたは本当にこのような練習を奨励したいですか?より良いアプローチは、OPからより多くを訴えることでした。なぜ彼らは彼らがこの要件を持っていると思っているのか理解することができます。これに基づいてダウン投票する。 –

+0

答えを求めている人には、私のビジネスの中には何もないし、あなたのものであるべきでもない。これはQ&Aフォーラムであり、未解決のサイトではありません。ところで、聞いている人は私には初心者のようではありません。次回は質問に答えてからアドバイスを提供するだけです。 @AdamCameron – KBJ

+1

スニッピーな友達を見つける必要はありません。 OP def *は、このような枠組みの質問をしているのなら、OOの職人だと思います。おそらくそうではありませんが、それは疑問を抱くようです。ときには - たいていは - 誰かが質問をするときに、質問することを意味する質問をしていないし、これを察知するために何らかの努力を要する。最終的に私たちは人々を助けるためにここにいる*だけでなく、盲目的に "Q&Aサイトであるので質問に答える"ことができます。 –

関連する問題