Има мнение, че с ООП можем да заменим условията като IF с полиморфизъм. Затова и използваме обекти. Обектът си идва с цял свой набор от функционалности и ако имаме група обекти от даден по-общ и по-глобален тип, и спазващи обща структура, можем да му ги извикваме (функционалностите) без да има нужда да проверяваме предварително от кой тип е обектът.
Искаш да лае – използваш обект Куче от тип Животно и му викаш метод doSound(), който метод лае.
Искаш да мяука – използваш обект Котка от обект Животно и му викаш метод doSound(), който метод мяука.
А не да проверяваш „ако си куче, изпълни doBauBau(), ако си котка изпълни doMiauMiau()…“
Tell, don’t ask.
Но със сигурност има и случаи, в които се налага все пак да подадем обект, който обаче да не прави нищо, демек – в нашият случай – да не издава звуци. Нещо като default случай.
Например имаме електронна игра с 4 копчета за команди – Up, Down, Left и Right, с които местим нещо по екрана. И искаме за всеки случай, ако например натиснем 2 копчета и т.н… да подадем команда за… невалидна команда, демек „не прави нищо“.
Тук идва идеята на Null object design pattern.
Подаваме обект, който е със същата структура като останалите 4 но методите му не вършат нищо. По този начин няма нужда да имаме разни проверки дали командата е валидна, дали е Up, Down…. и тогава да свършим нещо.
Просто като подадем пак НЕЩО, което обаче не върши НИЩО, постигаме същият ефект и то много по-елегантно и без проверки и т.н…
Литература:
https://docs.php.earth/php/ref/oop/design-patterns/null-object