Патч PHP Monkey для сторонних классов

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

<?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
    }
}

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

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

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


person Purus    schedule 23.02.2017    source источник
comment
Не могли бы вы расширить класс и добавить метод send в новый дочерний класс, который не вызывает parent::send() ? Это не сработает, если ваш код требует создания экземпляра базы MyMailer, хотя...   -  person CD001    schedule 23.02.2017
comment
@ CD001: Многие внешние библиотеки используют этот метод, и я не могу отредактировать их, чтобы использовать расширенный класс.   -  person Purus    schedule 23.02.2017
comment
Нет, расширенный класс будет вашим, и вы сможете делать с ним все, что захотите.   -  person RiggsFolly    schedule 23.02.2017
comment
Я понимаю. Но я хочу, чтобы все классы сторонних библиотек использовали мой расширенный класс? У меня нет контроля над этими внешними библиотеками. Изменение этих библиотек невозможно, так как это создаст проблемы во время обновлений.   -  person Purus    schedule 23.02.2017


Ответы (1)


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

http://patchwork2.org/

  1. Патчи Monkey любыми внутренними и другими методами.
  2. Легко использовать.
person Purus    schedule 02.03.2017