Nói rằng tôi có một lớp cha mẹ
class parentClass {
public function myMethod() {
echo "parent - myMethod was called.";
}
}
và lớp trẻ sau
class childClass extends parentClass {
public function callThroughColons() {
parent::myMethod();
}
public function callThroughArrow() {
$this->myMethod();
}
}
$myVar = new childClass();
$myVar->callThroughColons();
$myVar->callThroughArrow();
sự khác biệt trong việc sử dụng hai cách khác nhau để gọi myMethod() từ bên trong lớp kế thừa là gì? Sự khác biệt duy nhất tôi có thể nghĩ là nếu childClass ghi đè myMethod() bằng phiên bản của riêng mình, nhưng có bất kỳ khác biệt đáng kể nào khác không? Tôi nghĩ rằng toán tử dấu hai chấm (:) được cho là chỉ được sử dụng để gọi các phương thức tĩnh, nhưng tôi không nhận được bất kỳ cảnh báo nào khi gọi $ myVar-> callThroughColons(), ngay cả với E_STRICT và E_ALL trên đó. Tại sao vậy?
Cảm ơn bạn.
Tôi không nhận được cảnh báo ngay cả khi tôi sử dụng parentClass :: myMethod() thay vì parent ::, nhưng tôi có ý tưởng tổng thể - gọi phương thức từ lớp kế thừa bằng toán tử :: không thực sự tạo cuộc gọi tĩnh, và đó là một trường hợp đặc biệt. Cảm ơn. – user2339681
@ user2339681 Bạn gặp lỗi E_STRICT. Khi bạn bật báo cáo lỗi cao hơn, bạn sẽ thấy báo cáo lỗi. – bwoebi