シナリオ:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A;
function calc($v) {
$v++;
return A::calc($v);
}
}
print (new MyClass())->calc(2); // should print 4
このコードは機能せず、継承されたようなトレイト関数を呼び出す方法が見つかりません。私は呼び出してみましたself::calc($v)
、static::calc($v)
、parent::calc($v)
、A::calc($v)
および以下:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as traitcalc;
}
function calc($v) {
$v++;
return traitcalc($v);
}
}
何も機能しません。
それを機能させる方法はありますか、それともこれよりもはるかに複雑なトレイト関数を完全にオーバーライドする必要があります:)
あなたの最後のものはほとんどそこにありました:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as protected traitcalc;
}
function calc($v) {
$v++;
return $this->traitcalc($v);
}
}
特性はクラスではありません。メンバーに直接アクセスすることはできません。基本的には自動化されたコピーアンドペーストです...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加