Подтвердить что ты не робот

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

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

function blah(Bur $bur) {}

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

  • На самом деле ли это налагает какие-либо ограничения на какой тип переменной я могу перейти к методу blah?
  • Если это только для того, чтобы помочь IDE, это хорошо со мной. Как я могу объявить тип переменной в PHP, если я не в функции?
4b9b3361

Ответ 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, его тип определяется контекстом, в котором он используется.