簡単にするために、PHP は、クラス内で変更されたトレイトの名前を決定するための魔法の定数を提供していないように見えることに気付きました。これは言葉ではわかりにくいので、例を挙げます。比較的簡単で、新しい PHP 5.5 のどこかにあると予想されるため、それを行う方法がわかりません。だからここにあります:
クラス内の関数と競合する特性を使用するクラスがあるとします。例:
class SomeClass {
use \Name\Space\SomeTrait { SomeFunction as private NewFunctionName; }
function SomeFunction() {
$this->NewFunctionName();
}
}
明らかに、このクラスには「SomeFunction」関数があり、含まれている SomeTrait の内部には、このクラス内にある関数と名前が一致する関数があることがわかっています。さて、「SomeFunction」は\Name\Space内の特性を介してこのクラスに入ったので、これら2つの関数は2つの異なることを行いますが、たまたま同じ名前を使用し、別の関数または文字通り「SomeFunction」の内部で使用します、次に、「NewFunctionName」で呼び出すことにより、トレイトから「SomeFunction」を使用します。
上記のシナリオでの私の質問は次のとおりです。\Name\Space\SomeTrait\SomeFunction() 内で、この特性関数も割り当てられた "NewFunctionName" を取得するにはどうすればよいでしょうか? __ FUNCTION __、または__ METHOD __、または__ TRAIT __などの魔法のメソッドを使用すると考える人もいるでしょうが、これらのいずれも期待される結果をもたらさない場合を除きます。パラメータとして機能し、ハッキーなコードになりますか? PHP 5.6 では、新しい Magic Constant __ AS __を追加するか、 __ TRAITの結果を調整する必要があるかもしれません。__ 、 __ TRAIT __と__ FUNCTION _が同じ情報 (またはほぼ同じ情報) を返す必要がある理由がわかりません。それが型にはまらないハッキーな方法である場合、どんな助けも素晴らしいでしょう。これに関するphpでバグレポートを開くことができるまで、私のオプションを見てみたいと思います。(本当にバグなら)
編集:
私の現在の、最もハッキーでない方法は、
debug_backtrace()[0]['function']
機能しますが、特に関数を頻繁に使用する場合は、単純な文字列を取得するために多くのことをしていると思います。:/