Anda mungkin menghadapi situasi di mana anda perlu mengubah suai kelas atau kaedahnya tanpa pilihan pewarisan biasa. Ambil, sebagai contoh, kelas berikut:
class third_party_library { function buggy_function() { return 'bad result'; } function other_functions(){ return 'blah'; } }
Anda mungkin mahu menggantikan kaedah buggy_function() dengan pelaksanaan yang lebih diingini, tetapi berbuat demikian melalui warisan tidak boleh dilaksanakan. PHP tidak menyokong tampalan monyet secara asli, yang membolehkan anda mengubah suai kelas selepas ia ditentukan.
Satu penyelesaian yang berpotensi ialah menggunakan perpustakaan runkit PECL, yang menyediakan fungsi runkit_method_redefine(). Ini membolehkan anda mengubah suai kaedah dengan menilai rentetan kod:
runkit_method_redefine('third_party_library', 'buggy_function', '', 'return \'good result\'' );
Walau bagaimanapun, pendekatan ini mempunyai kelemahan. Mengubah suai kod melalui penilaian rentetan boleh berbahaya dan penyahpepijatan boleh mencabar.
Alternatif lain ialah mempertimbangkan untuk menambah fungsi pada kelas dan bukannya mengubah suai yang sedia ada. Dalam sesetengah bahasa, seperti C#, ini boleh dilakukan menggunakan "kelas separa." Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ini mungkin tidak dapat dilaksanakan kerana had rangka kerja dalam kes khusus anda.
Atas ialah kandungan terperinci Bolehkah saya Mengubah Suai Kaedah Kelas Tanpa Warisan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!