tình hình của tôi là mô tả tốt nhất với một chút mã:PHP trên lớp con
class Foo {
function bar() {
echo "called Foo::bar()";
}
}
class SubFoo extends Foo {
function __call($func) {
if ($func == "bar") {
echo "intercepted bar()!";
}
}
}
$subFoo = new SubFoo();
// what actually happens:
$subFoo->bar(); // "called Foo:bar()"
// what would be nice:
$subFoo->bar(); // "intercepted bar()!"
Tôi biết tôi có thể có được điều này để làm việc bằng cách xác định lại bar()
(và tất cả các phương pháp khác có liên quan) trong tiểu lớp học, nhưng với mục đích của tôi, nó sẽ được tốt đẹp nếu chức năng __call
có thể xử lý chúng. Nó chỉ làm cho mọi thứ trở thành một chỗ ngồi lô và dễ quản lý hơn.
Điều này có thể thực hiện được trong PHP không?
Điều này. Bạn cần phải làm theo các mô hình mặt tiền. Có một lớp bao bọc mà "sở hữu" đối tượng bạn muốn ghi đè lên tất cả các chức năng này. Sử dụng __call() để truyền qua các phương thức khi cần, thực hiện thêm bất kỳ công việc nào phù hợp. Đừng đổ mồ hôi hiệu suất trừ khi mã của bạn được gọi liên tục và ứng dụng của bạn bị giới hạn CPU (hầu như không bao giờ là trường hợp) - thời gian lập trình hầu như luôn quan trọng hơn hiệu suất khi quyết định loại giao dịch này. –