Kịch bản:Làm thế nào để ghi đè lên hàm trait và gọi nó từ hàm bị ghi đè?
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
Mã này không làm việc, và tôi không thể tìm thấy một cách để gọi một chức năng đặc điểm như nó đã được thừa hưởng. Tôi đã thử gọi self::calc($v)
, static::calc($v)
, parent::calc($v)
, A::calc($v)
và sau đây:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as traitcalc;
}
function calc($v) {
$v++;
return traitcalc($v);
}
}
Không có gì hoạt động.
Có cách nào để làm cho nó làm việc hay tôi phải ghi đè lên hoàn toàn các chức năng đặc điểm đó là phức tạp hơn nhiều so với :)
Perfect! Cảm ơn bạn! Rõ ràng bộ não của tôi đã tan chảy. :) – Shu
chỉ để làm rõ - một khi lớp học của bạn xác định cùng một phương pháp, nó sẽ tự động ghi đè đặc điểm của nó. Đặc điểm đầy trong phương thức như @ircmaxell đề cập khi nó trống. – Yehosef
Vì những lý do chưa biết, điều này hoàn toàn làm say đắm một đặc điểm mà tôi đã áp dụng điều này. Các phương pháp khác mà đặc tính đang kéo vào có thể không hoạt động như mong đợi khi bạn làm điều này. –