Tại sao không thể có trong PHP 7, để khai báo giao diện có loại trả về static
?loại trả về tĩnh trong giao diện PHP 7
Hãy nói rằng tôi có các lớp sau:
interface BigNumber {
/**
* @param BigNumber $that
*
* @return static
*/
public function plus(BigNumber $that);
}
class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }
Tôi muốn thực thi các kiểu trả về của phương pháp plus()
-static
, đó là:
BigInteger::plus()
phải trả lại mộtBigInteger
BigDecimal::plus()
phải trả lạiBigDecimal
tôi có thể tuyên bố giao diện theo cách sau:
public function plus(BigNumber $that) : BigNumber;
Nhưng điều đó không thực thi trên. Những gì tôi muốn làm là:
public function plus(BigNumber $that) : static;
Nhưng PHP 7, cho đến nay, là không hài lòng với nó:
PHP Parse error: syntax error, unexpected 'static' (T_STATIC)
Có một lý do cụ thể cho điều này, hay đây là lỗi mà nên được báo cáo?
Loại bất biến, đó là lý do. Các phương thức triển khai/ghi đè phải khớp chính xác với loại trong PHP; 'static' không - rõ ràng, bởi vì nó đề cập đến ngữ cảnh hiện tại và do đó không thể được invarianced. –