I am not sure but I believe that the fact of the method morph() is open to return 2 different values ($newInstance or Exception) would break the Open Closed, but I can not think in another way to obtain that result without use this verification (if...). I am studing the solid principle but sometimes they look so confusing. —
Rimom Aguiar 26 mins ago