2012-01-10 38 views
5

Điều này thực sự xuất phát từ một vấn đề WordPress cụ thể nhưng có một điểm PHP tổng quát hơn đằng sau nó mà tôi quan tâm để biết câu trả lời.Có thể thay thế một hàm trong lớp PHP không?

WordPress lớp nằm dọc theo những dòng này:

class Tribe_Image_Widget extends WP_Widget { 
    function example_function(){ 
     // do something useful 
    } 
} 

Có cách nào trong PHP mà tôi có thể thay thế example_function() từ bên ngoài lớp học?

Lý do tôi muốn làm điều này là lớp học từ plugin WP của người khác (và có nhiều chức năng trong lớp) và tôi muốn tiếp tục nhận cập nhật cho plugin nhưng tôi muốn một trong các chức năng được điều chỉnh. Nếu tôi thay đổi plugin, tôi sẽ mất tất cả các thay đổi của riêng mình mỗi lần. SO nếu tôi có plugin của riêng tôi mà chỉ thay đổi một chức năng, tôi tránh được vấn đề.

+0

Bạn có thể đặt lớp gốc làm trừu tượng và đặt là metho d như một phương pháp trừu tượng? –

+0

Lookup: http://stackoverflow.com/questions/2994758/function-overloading-and-overriding-in-php –

+0

Tuyên bố trừu tượng chỉ sẽ ngăn chặn các lớp gốc từ được sử dụng trực tiếp và ông vẫn sẽ phải chỉnh sửa nó mỗi lần. – Narf

Trả lời

9

Có vẻ như những gì bạn muốn làm là extend lớp và ghi đè chức năng cụ thể đó.

Class Your_Tribe_Image_Widget extends Tribe_Image_Widget 
{ 
    function example_function() { 
    // Call the base class functionality 
    // If necessary... 
    parent::example_function(); 

    // Do something else useful 
    } 
} 
+0

Hoàn hảo, cảm ơn – user114671

1

Bạn lẽ có thể có một include_once để các plugin mục tiêu ở phía trên cùng của tập tin của bạn và sau đó mở rộng các lớp của mục tiêu cắm thay vì lớp WP_Widget:

include_once otherPlugin.php 
class My_Awesome_Plugin_Overloaded extends Someone_Elses_Awesome_Plugin{ 
    function example_function(){ 
     return 'woot'; 
    } 
} 
1

Chừng nào phương thức trong lớp hiện tại chưa được đánh dấu là cuối cùng, bạn chỉ có thể phân lớp và ghi đè nó là

class My_Tribe_Image_Widget extends Tribe_Image_Widget { 
    //override this method 
    function example_function(){ 
     // do something useful 
    } 
} 
Các vấn đề liên quan