親で定義されたメソッドに対して子クラスの__callマジックメソッドが呼び出されるように、何らかの方法で親メソッドを非表示にしたいと思います。例えば:
class C {
function foo() { echo "foo\n"; }
}
class D extends C {
function __call( $method, $args ) { echo "called $name\n"; }
}
$d = new D();
$d->foo();
// desired result: called foo
// actual result: foo
rename_functionとoverride_functionにチェックインしましたが、これらはメソッドでは機能しません。ReflectionMethodには私が試したsetAccessibleメソッドがありますが、これはReflectionMethodインスタンスを使用してメソッドを呼び出す場合にのみ機能するようです。
背景:PHPの型チェックを利用できるRPCプロキシクラスを作成しようとしています。したがって、RPCFooがある場合は、型ヒントまたはinstanceofを使用して、それを確認できるように型を強制できます($ RPCFooインスタンスFoo)。
編集:基本クラスは、プロキシなしでそのまま使用できる必要があります。これは、プロキシがコードではなくシステム構成の一部になるようにするためです。すべて同じコードベースを持つ複数のサーバーを考えてみてください。ただし、それぞれに特定のタスクを割り当てることができます。ローカルサーバーが要求されたサービスを処理しない場合、クラスローダーは基本クラスの代わりにプロキシを返します。ローカルサーバーが要求されたサービスを処理する場合、ローカルサーバーは基本クラスを返します。
もう一度編集:提示されたメソッドは実行可能ですが、基本クラスの設計されたインターフェイスをIDEとリフレクションから隠します。基本クラスから継承してプロキシインターフェイスを実装するだけで済むように、プロキシ実装をクリーンにしようとしていました。基本クラスのインターフェースを維持するために、プロキシ開発者は、リモート呼び出しを行うためにすべてのパブリックメソッドと保護されたメソッドを再実装する必要があります。次に、基本クラスで何かが更新されると、プロキシも更新する必要があります。結局、私は単に、リフレクションを使用するプロキシジェネレーターを作成するルートをたどり、開発者のためにこれを行うつもりだと思います。
返信ありがとうございます!