私は2年間PHPでプログラミングしていないので、これを捨てています。そのように保護されたメソッドを呼び出すクラスに関数を追加していただけませんか?
$obj->publicFunc = create_function('$arg', 'return $this->protectedFunc($arg);');
編集:
create_function のドキュメントを見て、Tom は正しいと思います。この例で呼び出そうとすると、 $this のスコープが「間違っている」ように見えます。
従来の匿名関数も PHP 5.3.0 以降でサポートされているようです (そして、私の最初の解決策はおそらく機能しないでしょう)。そのため、代わりに次のように記述します。
$obj->publicFunc = function($arg) {
return $this->protectedFunc($arg);
};
私はそれが少しきれいに見えると思うので(もちろん、選択したIDEはそれをよりよく強調します)。
うーん、リフレクションを使用してメソッドを呼び出してみましたが、PHP でもそれができません。他のポスターが示唆しているように、ある種の子クラスを使用する必要があるようです。機能するメソッドが見つかった場合、開発者は将来それをバグとして分類し、次のバージョンにアップグレードしたときにコードを壊す可能性があります。
クラスの延長をお勧めします。