DevMan: > в любом классе публичные свойства можно модифицировать, почему этот должен быть исключением?
В любом классе свойства можно/нужно сделать приватными а в стд... По моему мнению ООП для того, чтобы классы были предсказуемы и на основании их описания можно было понять их зону ответсвенности, понять какой тип/данные возвращает, скрыть разрешить изменение этих данных.
Стд еще хуже чем массив себя поведет ибо объекты передаются по ссылке и затереть данные случайно очень просто (тоже самое, что и по ссылке массивы обрабатывать)
> в массиве они тоже создаются динамически, например, при json_decode, но это же не трагедия?
Трагедия! Для этого и существуют классы, чтобы данные были задокументированы. json_decode чаще всего данные извне, которые валидируются в соответствии с типом ожидаемых данных
Каждую передачу std объекта в метод нужно валидировать на существование свойства. Например при изменение разработчиком класса можно зайти в него и посмотреть что изменилось и добавить какие то изменения в код. А как проследить изменения в stdClass? Нужно просмотреть весь проект, чтобы определить места, где он мог измениться!
DevMan: >то зачем мы сейчас вообще трем за std?
Зачем он тогда нужен, я же и спрашиваю. Если у него нет вообще никаких преимуществ и данные в нем легко можно модифицировать, затереть и т.д.
DevMan: Хороший пример это модельки какой нибудь ORM. Объявил и взял. Доступны все публичные свойства объекта. Глядя на класс, можно понять что за свойства и методы у него. А у std? А может он пришел урезанным (битые данные)?
DevMan: >а stdclass и доступ к свойствам? К каким? Они же создаются динамически, и я не знаю что в них есть, будет или было.
> и окуда его брать? где он объявлен?
Объявлять и брать :)
а причем тут "без пыха", если вы говорите об "удобствах сокращения". Я вам показал пример, когда это вредно, ибо в смарти это выглядит более лучше (короче).