СП

Правильно я понимаю, что вот здесь
empty($array)
всегда будет возвращать false
, т. к. $array
— объект? И как следствие весь блок
if (!property_exists($array, $part) && empty($array)) {... можно смело удалить.
return $default;
}
+ в описании к методу
getValue()
добавить, что $default возвращается только для массивов, а для объекта всегда будет попытка возвращения, т. к. могут быть магические методы и 100% узнать, что значения нет в объекте нельзя.