Lionishy
Новичок
В Java мы можем определить абстракцию с некоторой типовой меткой T и эта метка будет строго говорить нам, что разрешается использовать только те экземпляры, для которых определена точно такая метка, то есть имена типов строго совпадают. Это именованный подход к определению типа. Очень удобен для определения типов как набора "поведений": правил преобразования, вывода экземпляров, и аксиом.
Однако такой подход не всегда удобен... Например, определять строку поведением -- избыточно. Мы просто повторим поведение списка или массива. Более простой и ясный способ определить внутреннюю структуру строки, а из неё выводить допустимое поведение. Такой подход говорит, что тип определяется своим конструктором и по существу просто псевдоним своей структуры.
Природа хранимых и обрабатываемых нами данных такова, что мы определяем возможные действия над данными, анализируя их структуру, а не только опираясь на аксиомы или правила. Это приводит к тому, что в языках типа Java, где типы могут быть только именованными, но не структурными, работа с данными осложняется. Для интуитивно одинаковых данных мы вынуждены присваивать разные метки. Мы постоянно вынуждены разводить рефлексии над типами-данными, чтобы узнать, а не сможем ли подсунуть эти данные в правильный обработчик.
В купе с катастрофической ситуацией, когда язык предлагает нам не самый хороший вариант ООП, включая ужасные провалы стандартной библиотеки, необходимость работы с данными превращается в ночной кошмар.
А что в PHP?
Однако такой подход не всегда удобен... Например, определять строку поведением -- избыточно. Мы просто повторим поведение списка или массива. Более простой и ясный способ определить внутреннюю структуру строки, а из неё выводить допустимое поведение. Такой подход говорит, что тип определяется своим конструктором и по существу просто псевдоним своей структуры.
Природа хранимых и обрабатываемых нами данных такова, что мы определяем возможные действия над данными, анализируя их структуру, а не только опираясь на аксиомы или правила. Это приводит к тому, что в языках типа Java, где типы могут быть только именованными, но не структурными, работа с данными осложняется. Для интуитивно одинаковых данных мы вынуждены присваивать разные метки. Мы постоянно вынуждены разводить рефлексии над типами-данными, чтобы узнать, а не сможем ли подсунуть эти данные в правильный обработчик.
В купе с катастрофической ситуацией, когда язык предлагает нам не самый хороший вариант ООП, включая ужасные провалы стандартной библиотеки, необходимость работы с данными превращается в ночной кошмар.
А что в PHP?