Объявление переменных типов в PHP?
Я пытался заставить мои Netbeans автозаполнять PHP с помощью PHP, и я узнал, что этот код действителен в PHP:
function blah(Bur $bur) {}
Несколько вопросов:
- На самом деле ли это налагает какие-либо ограничения на какой тип переменной я могу перейти к методу blah?
- Если это только для того, чтобы помочь IDE, это хорошо со мной. Как я могу объявить тип переменной в PHP, если я не в функции?
Ответы
Ответ 1
Этот тип-подсказка работает только для проверки аргументов функции; вы не можете объявить, что переменная PHP всегда должна иметь определенный тип. Это означает, что в вашем примере $bur должен иметь тип Bur, когда вызывается "blah", но $bur может быть переназначен в значение non-Bur внутри функции.
Тип-подсказка работает только для имен классов или интерфейсов; вы не можете объявить, что аргумент должен быть целым числом, например.
Один раздражающий аспект подсказки типа PHP, который отличается от Java, заключается в том, что значения NULL недопустимы. Поэтому, если вам нужна опция передачи NULL вместо объекта, вы должны удалить подсказку типа и сделать что-то вроде этого в верхней части функции:
assert('$bur === NULL || $bur instanceof Bur');
EDIT: Этот последний абзац не применяется с PHP 5.1; теперь вы можете использовать значение NULL как значение по умолчанию, даже с подсказкой типа.
РЕДАКТИРОВАТЬ: Вы также можете установить расширение SPL Type Handling, которое дает вам типы оберток для строк, ints, float, booleans и перечисления.
EDIT: Вы также можете использовать "массив" с PHP 5.1 и "вызываемый" с PHP 5.4.
EDIT: Вы также можете использовать "string", "int", "float" и "bool" с PHP 7.0.
Ответ 2
- Указание типа данных для параметра функции приведет к тому, что PHP выкинет уязвимую фатальную ошибку, если вы передадите значение, которое не относится к этому типу. Обратите внимание, однако, что вы можете указывать только типы для классов, а не примитивы, такие как строки или целые числа.
- Большинство IDE могут вывести тип данных из комментария стиля PHPDoc, если он предоставлен. например.
/**
* @var string
*/
public $variable = "Blah";
Ответ 3
Он называл тип hinting, добавленный с PHP 5. Это не совсем то, что вы можете ожидать, если вы исходите с такого языка, как Java. Это вызывает ошибку, если вы не проходите в ожидаемом типе. Вы не можете вводить примитивы-подсказки, хотя (нет int $bur).
Ответ 4
# 2: (...) Как я могу объявить тип переменной в PHP, если у меня нет функции?
Недавно я слышал о " settype()" и " gettype ( )" в PHP4 и 5
Вы можете принудительно изменить тип переменной в любое время
От PHP.net:
bool settype (mixed & $var, string $type)
Параметры
var: переменная, которая преобразуется.
type: Возможные значения типа:
- "boolean" (или, начиная с PHP 4.2.0, "bool" )
- "integer" (или, начиная с PHP 4.2.0, "int" )
- "float" (возможно только с PHP 4.2.0, для более старых версий используется устаревший вариант "double" )
- "строка"
- "массив"
- "объект"
- "null" (начиная с PHP 4.2.0)
[: D Первый визит, первый комментарий...]
Ответ 5
Действительно ли это налагает какие-либо ограничения на то, какой тип переменной я могу передать методу blah?
Это называется тип hinting. Согласно документации PHP, с которой я только что связался, да, она налагает ограничения на тип аргумента: "Неспособность удовлетворить подсказку типа приводит к уловимой фатальной ошибке".
Как я могу объявить тип переменной в PHP, если у меня нет функции?
Считать тип жонглирования. Вы не можете явно определить тип переменной в PHP, его тип определяется контекстом, в котором он используется.