Объявление переменных типов в PHP?

Я пытался заставить своих Netbeans автозаполнять PHP , и я узнал, что этот код действителен в PHP:

function blah(Bur $bur) {} 

Несколько вопросов:

  1. Действительно ли это налагает какие-либо ограничения на то, какой тип переменной я могу передать методу бла?
  2. Если это только для того, чтобы помочь IDE, все в порядке со мной. Как я могу объявить тип переменной в PHP, если у меня нет функции?

Этот тип-подсказка работает только для проверки аргументов функции; вы не можете объявить, что переменная PHP всегда должна иметь определенный тип. Это означает, что в вашем примере $ bur должен иметь тип Bur, когда вызывается «blah», но $ bur может быть переназначен в значение non-Bur внутри функции.

Тип-подсказка работает только для имен классов или интерфейсов; вы не можете объявить, что аргумент должен быть целым числом, например.

Один из раздражающих аспектов типа PHP-намека, который отличается от Java, заключается в том, что значения NULL недопустимы. Поэтому, если вам нужна опция передачи NULL вместо объекта, вы должны удалить подсказку типа и сделать что-то вроде этого в верхней части функции:

 assert('$bur === NULL || $bur instanceof Bur'); 

EDIT: этот последний абзац не применяется с PHP 5.1; теперь вы можете использовать значение NULL в качестве значения по умолчанию, даже с подсказкой типа.

EDIT: вы также можете установить расширение SPL Type Handling , которое дает вам типы обертки для строк, ints, float, booleans и перечислений.

EDIT: вы также можете использовать «массив» с PHP 5.1 и «вызываемый» с PHP 5.4.

EDIT: вы также можете использовать «string», «int», «float» и «bool» с PHP 7.0.

  1. Указание типа данных для параметра функции приведет к тому, что PHP выкинет уязвимую фатальную ошибку, если вы передадите значение, которое не относится к этому типу. Обратите внимание, однако, вы можете указывать только типы для классов, а не примитивы, такие как строки или целые числа.
  2. Большинство IDE могут вывести тип данных из комментария стиля PHPDoc, если он предоставлен. например
 /** * @var string */ public $variable = "Blah"; 

Это называется намеком типа, добавленным с PHP 5. Это не совсем то, что вы можете ожидать, если вы исходите с такого языка, как Java. Это вызывает ошибку, если вы не проходите в ожидаемом типе. Вы не можете вводить примитивы-подсказки, хотя (нет int $ bur).

# 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 Первый визит, первый комментарий …]

Действительно ли это налагает какие-либо ограничения на то, какой тип переменной я могу передать методу бла?

Это называется намеком типа . Согласно документации PHP, с которой я только что связался, да, она налагает ограничения на тип аргумента: « Неспособность удовлетворить подсказку типа приводит к уловимой фатальной ошибке ».

Как я могу объявить тип переменной в PHP, если у меня нет функции?

Чтение жонглирования . Вы не можете явно указать тип переменной в PHP, его тип определяется контекстом, в котором он используется.