Scenario:Come sovrascrivere la funzione tratti e chiamarla dalla funzione ignorata?
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
Questo codice non funziona, e non riesco a trovare un modo per chiamare una funzione caratteristica come è stato ereditato. Ho provato a chiamare self::calc($v)
, static::calc($v)
, parent::calc($v)
, A::calc($v)
e la seguente:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as traitcalc;
}
function calc($v) {
$v++;
return traitcalc($v);
}
}
Niente funziona.
C'è un modo per farlo funzionare o devo ignorare completamente la funzione tratto che è molto più complessa di così :)
Perfetto! Grazie! Ovviamente il mio cervello non si è sciolto. :) – Shu
solo per chiarire: una volta che la classe definisce lo stesso metodo, sovrascrive automaticamente le caratteristiche del tratto. Il tratto riempie il metodo come @ircmaxell menziona quando è vuoto. – Yehosef
Per ragioni ancora sconosciute questo ha completamente rovinato un tratto con cui ho applicato questo. Gli altri metodi in cui il tratto sta entrando potrebbero non funzionare come previsto quando lo fai. –