Как обратиться к новому классу без изменения ссылок в php

У меня есть вопрос об архитектурном шаблоне ОО. Я думаю, что допустил ошибку в архитектуре, но у меня нет времени на полный рефакторинг и "сделать это правильно".

Итак, вот: в существующей системе PHP у меня есть «новый Myclass» и «if ($ class instanceof Myclass)» повсюду. Теперь я обнаружил, что мне нужна новая версия Myclass, но у меня нет пропускной способности, чтобы изменить и протестировать все существующие ссылки на Myclass.

Поэтому мне интересно, есть ли шаблон, доступный в php, по которому я все еще могу сохранять свои ссылки на Myclass и делать что-то такое, что он ссылается на MyclassV2, не меняя каждую ссылку.

Предпочтительно, чтобы я мог создать новую или старую версию.

Я не против изменить Myclass и/или добавить новые классы по мере необходимости.


person sdfor    schedule 29.03.2016    source источник
comment
Реализовать interface   -  person u_mulder    schedule 29.03.2016
comment
Спасибо за ваш ответ, хотя я не уверен, как интерфейс, который я рассматриваю как исполнитель правил, требующий существования методов интерфейса, решает мой вопрос.   -  person sdfor    schedule 29.03.2016
comment
Эти классы реализуют одни и те же методы или нет?   -  person Devon    schedule 29.03.2016
comment
Да, они реализуют одни и те же методы.   -  person sdfor    schedule 30.03.2016
comment
Таким образом, расширение класса должно нормально работать в ответе ниже. За исключением того, что вы, вероятно, хотите, чтобы Myclass расширял MyclassV2.   -  person Devon    schedule 30.03.2016


Ответы (1)


Просто расширьте Myclass.

class MyclassV2 extends Myclass {}

$MyclassV2 = new MyclassV2();
var_dump($MyclassV2 instanceof Myclass); // true
person Federkun    schedule 29.03.2016
comment
и тогда мне пришлось бы изменить все ссылки в системе с Myclass на Myclass2. Я пытался избежать этого. - person sdfor; 30.03.2016
comment
вы можете оставить Myclass. Выше я сделал пример, в чем проблема? что вы имеете в виду, когда говорите о the reference? - person Federkun; 30.03.2016