Tôi đang cố gắng mở rộng một lớp PHP mà không cần viết lại toàn bộ điều. Dưới đây là một ví dụ:Làm thế nào một lớp PHP có thể mở rộng thêm một hàm riêng khác?
<?
$a = new foo();
print $a->xxx();
$b = new bar();
print $b->xxx();
class foo {
const something = 10;
public function xxx() {
$this->setSomething();
return $this->something;
}
private function setSomething() {
$this->something = self::something;
}
}
class bar extends foo {
public function xxx() {
$this->setSomething();
$this->something++;
return $this->something;
}
}
?>
Tuy nhiên khi tôi chạy kịch bản tôi nhận được lỗi sau:
Fatal error: Call to private method foo::setSomething() from context 'bar' in test.php on line 23
Có vẻ như thanh mà không kế thừa các chức năng setSomething tin(). Làm thế nào tôi sửa lỗi này mà không sửa đổi lớp foo?
Bạn không thể thay đổi 'setSomething()' thành 'được bảo vệ'? – alex
Như tôi đã nói ở trên, lớp foo không được sửa đổi. Làm cách nào khác tôi có thể làm điều này? –
Bạn sử dụng đúng công cụ cho công việc, nghĩa là, bảo vệ nó 'bảo vệ'. – alex