2017-02-23 38 views
0

У меня есть класс ниже в сторонней библиотеке, которую я не должен изменять.PHP Monkey Patching для сторонних классов

<?php 

class MyMailer { 
    public function send() { 
     $mail = new PHPMailer(); 

     $mail->setFrom('[email protected]', 'Your Name'); 
     $mail->addAddress('[email protected]', 'My Friend'); 
     $mail->Subject = 'First PHPMailer Message'; 
     $mail->Body = 'Hi! This is my first e-mail sent through PHPMailer.'; 

     $mail->Send(); 
    } 

    public function check(){ 
     //code 
    } 
} 

Как я могу отменить или подключить посыла() метод или как я могу переопределить весь класс MyMailer с моим собственным новым классом?

В приведенной ниже ссылке предлагается использовать runKit, который по умолчанию не связан с PHP. Таким образом, нет никакой гарантии, что все доступно на всех моих серверах. Я узнал, что этот подход называется Monkey Patching.

Все ответы очень старые, и я хочу, если есть любое новое решение доступно.

+0

Не могли бы вы расширить класс и добавить метод 'send' к новому дочернему классу, который не вызывает' parent :: send() '? Он не будет работать, если вашему коду требуется создать экземпляр базы MyMailer, хотя ... – CD001

+0

@ CD001: много внешних библиотек используют этот метод, и я не могу редактировать их, чтобы использовать расширенный класс. – Purus

+0

Нет, расширенный класс будет вашим, чтобы делать то, что вы хотите – RiggsFolly

ответ

0

Библиотека исправлений настолько проста, и я заставляю ее работать с несколькими попытками.

http://patchwork2.org/

  1. Monekey залатать любые внутренние и другие методы.
  2. Прост в использовании.