PHP Clone / Дублировать / Переместить метод из одного объекта в другой - PullRequest
0 голосов
/ 08 сентября 2018

Я искал около часа или около того. Я продолжаю находить статьи на НЕПРАВИЛЬНУЮ тему; «Методы клонирования» - метод , называемый clone; проверка на наличие дублирующих методов; рефакторинг ... ЭТО НЕ то, что я ищу.

То, что у меня есть, является очень общим и базовым запросом, но сложным, учитывая, что я не нашел статьи, обсуждающей его. Я хотел бы переместить методы из одного объекта в другой. Предположим, я создаю два общих объекта:

class Test {
    private function test0($param=null) {echo 'test0';}
    protected function test1($param=null) {echo 'test1';}
    public function test2($param=null) {echo 'test2';}
    public function test3($param=null) {echo 'test3';}
}
$test = new Test();
$copy = new stdClass();

Как мне искать методы в $test и дублировать их внутри $copy? Кроме того, я не хочу просто копировать все. Предположим, я хочу скопировать только test0(), test1() и test2().

Затем я бы хотел удалить методы из $test один за другим (но не в массовом сокращении). Мне нужно ручное управление копированием, дублированием и удалением методов.

1 Ответ

0 голосов
/ 08 сентября 2018

PHP не является JavaScript. Не зная ваших причин, это звучит так, как будто вы можете захотеть посмотреть на инъекцию зависимостей / инверсию контроля.

В качестве альтернативы есть расширение PHP под названием runkit , которое позволяет напрямую добавлять / удалять методы. Таким образом, вы можете просто иметь базовый класс со всеми методами и использовать runkit для удаления любых ненужных вам. Однако Runkit не был обновлен для php7.

С учетом сказанного, признаки являются наиболее близкими к «предопределенным методам, которые вы можете добавить в любой класс». В сочетании со встроенным магическим методом PHP __call вы можете настроить что-то похожее на то, что они сделали с этой библиотекой на основе признаков (spatie / macroable) .

Как правило, написание, тестирование и запуск кода имеют много недостатков. Как гласит старая поговорка: есть несколько способов стричь овцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...