#php #types #type-hinting
#php #типы #подсказка типа
Вопрос:
object
Действительно array
ли разрешены только типы для подсказок типа?
Кроме того, в документации указано, что стандартные типы string
и int
не могут быть указаны как тип.
И это делает меня более любопытным. В чем причина разрешения только двух подсказок типа и удаления стандартных?
Заранее спасибо!
Комментарии:
1. Вы также можете использовать класс как тип.
2. Вы также можете использовать интерфейс в качестве типа.
3. Они попадают в категорию
object
anyway .
Ответ №1:
В настоящее время PHP 5.3 поддерживает только array
и ClassName
typehints .
Предстоящая версия PHP 5.4 также будет поддерживать callable
typehints.
Причина, по которой скалярные указатели типов в настоящее время не поддерживаются, заключается в том, что их поведение в слабо типизированном языке неясно:
- Должна ли выдаваться ошибка, даже если это просто разница между
1
и'1'
? -> Против духа PHP - Следует ли применять обычные приведения PHP? В этом случае
'hallo'
0
дляint
typehint -> Неинтуитивный - Должны ли применяться какие-то более строгие правила приведения?
Именно по этой причине реализация scalar typehint была исключена из PHP 5.4 — по этому вопросу не было консенсуса.
Комментарии:
1. Ах, и это заставляет меня думать, что PHP был несколько экспериментальным в начале, и по мере его роста он просто расширяется. Любая ссылка на слабо типизированный язык ?
2. @Tom en.wikipedia.org/wiki/Weak_typing Это означает, что PHP выполняет неявное приведение типов. Например, вы можете написать
echo $int;
вместо явногоecho (string) $int;
3. Это означает, что нет способа заставить начинающих / экспериментаторов / странников правильно использовать мое приложение при написании низкоуровневых материалов?
4. Вы можете добавлять
@param
аннотации только для того, чтобы помочь людям использовать ваши API.5. Вы могли бы программировать защитно, но это не рекомендуется в API. Разработчики должны научиться использовать их правильно.
Ответ №2:
Да, только array и object являются типами, разрешенными для подсказки типа.
http://www.php.net/manual/en/language.oop5.typehinting.php
Смотрите последнюю строку:
Подсказки типа могут быть только типа object и array (начиная с PHP 5.1). Традиционная подсказка типа с помощью int и string не поддерживается.