2

debug_backtrace() 以外で呼び出し元の関数を取得する方法はありますか?

friendinternalなどのスコープをシミュレートするための貪欲でない方法を探しています。

クラスAとクラスBがあるとしましょう。

今までdebug_backtrace()は欲張りすぎる(私見ですが)を使っていました。

私は次のようなことを考えました:

<?php

    class A
    {
        public function __construct(B $callerObj) {}
    }

    class B
    {
        public function someMethod()
        {
            $obj = new A($this);
        }
    }
?>

特定の 1 つのクラスに制限したい場合は問題ないかもしれませんが、300 のクラスがあり、そのうちの 25 に制限したいとしましょう。

1 つの方法は、インターフェースを使用して集約することです。

public function __construct(CallerInterface $callerObj)

しかし、それでも醜いコードです。

さらに、そのトリックは静的クラスでは使用できません。

もっと良いアイデアはありますか?

4

2 に答える 2

6

PHP は、これを処理する洗練された方法を実際に提供していません。言語のフレームワークを始めるつもりはありませんが、あなたのデザイン スキルとニーズがツールの限界を超えている可能性があることを、おそるおそる提案します。PHP は軽量のスクリプト言語であり、多数の疑似 OOP 機能がボルトで組み込まれていますが、その核心は、洗練されたエンタープライズ アーキテクチャ向けに設計されたことはありません。

于 2010-03-27T09:04:16.743 に答える
2

を呼び出すことができますがdebug_backtrace(FALSE)、これはオブジェクト インデックスを設定しません。これにより速度が少し向上しますが、通常、アプリが速度が問題にならないソフトウェア ツールである場合や、エラー処理に使用する場合を除き、debug_backtrace は製品コードでは使用しないでください。

私が理解していることから、あなたはしたいです

  • 呼び出し先で利用可能な呼び出し元への暗黙的な参照を持ち、
  • 選択したクラスのプライベートおよび保護されたプロパティへの外部アクセス。

両方とも PHP には存在しません (そしてカプセル化 imho を壊します)。ディスカッションについては、を参照してください。

于 2010-03-27T09:01:00.603 に答える