подсказки типов и причины, стоящие за их ограничениями

#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 не поддерживается.