да в целом типизация зло, ведь ты никогда не знаешь, что тебе придет в функцию, объект, строка или число. Да и по уму надо было сделать было 1 тип и все методы работы только с ним)
Пытался ознакомится с кодом со своего nexus 5, и первое что бросилось в глаза, так это передача $transport любой переменной без проверки типа .. а позже соответственно вызов методов от него. Эта переменная передается в yii::createObject, и от нее вызывают методы, которых может не быть. Такое в коде большого проекта отследить будет трудно
В setter методе нет проверки по типу, поэтому туда может быть передан любая сущность , даже не класс. Если даже класс, то он может не обладать нужным набором атрибутов или свойств, необходимых для полноценной работы transport сущности.
Таким образом ошибки могут возникнуть на любом из этапов, если этот компонент не будет вызываться ток в 1 месте, а будет обернут во что либо динамическое, например внутри какой либо crm
Разработчик пользователь может не углядеть, каким требованиям должен удовлетворять его новый класс типа транспорт, так как нет строгово интерфейса, или абстрактного класса. И баги будут выдавливаться по ходу дела