シナリオ:
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);
}
}
何も機能しません。
これを動作させる方法はありますか、それともこれよりもはるかに複雑な特性関数を完全にオーバーライドする必要がありますか :)
ベストアンサー1
最後のものはほぼ完成していました:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as protected traitcalc;
}
function calc($v) {
$v++;
return $this->traitcalc($v);
}
}
特性はクラスではありません。そのメンバーに直接アクセスすることはできません。基本的には、自動化されたコピー アンド ペーストだけです...