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

Неустранимая ошибка: [TraitA] и [TraitB] определяют одно и то же свойство ([$ x]) в композиции [ClassC]

Происходит, когда класс пытается use несколько Черты , где две или более из этих признаков имеют , определяют свойство с тем же именем и с свойством, имеющим разные начальные значения.

Пример:

Проблемное: хотя можно разрешить конфликты между конкурирующими методами , в настоящее время нет синтаксиса, который бы разрешил конфликт между двумя конкурирующими свойствами. Единственное решение в это время - refactor ; т.е. избежать конфликта между именами свойств, которые приводят к фатальной ошибке.


Вопросы, относящиеся:

47
задан Community 23 May 2017 в 11:47
поделиться

5 ответов

Этот вывод подсказок типа только работает на проверку аргументов функции; Вы не можете объявить, что переменная PHP должна всегда иметь определенный тип. Это означает, что в Вашем примере, $bur должен иметь Колючку типа, когда "вздор" называют, но $bur мог быть повторно присвоен значению неколючки в функции.

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

Один раздражающий аспект вывода подсказок типа PHP, который отличается от Java, то, что Нулевые значения не позволяются. Таким образом, если Вы хотите опцию передающего ПУСТОГО УКАЗАТЕЛЯ вместо объекта, необходимо удалить подсказку типа и сделать что-то вроде этого во главе функции:

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

РЕДАКТИРОВАНИЕ: Этот последний абзац не применяется начиная с PHP 5.1; можно теперь использовать ПУСТОЙ УКАЗАТЕЛЬ в качестве значения по умолчанию, даже с подсказкой типа.

РЕДАКТИРОВАНИЕ: можно также установить Тип SPL, Обрабатывающий расширение, которое дает Вам типы обертки для строк, ints, плаваний, булевских переменных и перечислений.

РЕДАКТИРОВАНИЕ: можно также использовать "массив" начиная с PHP 5.1, и "вызываемый" начиная с PHP 5.4.

РЕДАКТИРОВАНИЕ: можно также использовать "строку", "интервал", "плавание" и "bool" начиная с PHP 7.0.

71
ответ дан Jost 26 November 2019 в 19:25
поделиться
  1. Определение типа данных для параметра функции заставит PHP бросать catchable фатальную ошибку при передаче значения, которое не имеет того типа. Отметьте, хотя, можно только определить типы для классов, и не примитивы, такие как строки или целые числа.
  2. Большая часть IDE может вывести тип данных из комментария стиля PHPDoc, если Вам предоставляют. например,

/**
 * @var string
 */
public $variable = "Blah";
29
ответ дан Jim OHalloran 26 November 2019 в 19:25
поделиться

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

7
ответ дан J Cooper 26 November 2019 в 19:25
поделиться

#2: (...), Как я могу объявить тип переменной в PHP, если я не нахожусь в функции?

я недавно услышал о" settype () " и" gettype () " в PHP4 & 5
можно вызвать тип переменной в любое время легко

<час>

С PHP.net:

bool settype (смешал & $var, строковый $type)

Параметры

var: переменная преобразовывается. введите: значения Possibles типа:

  • "булевская переменная" (или, начиная с PHP 4.2.0, "bool")
  • "целое число" (или, начиная с PHP 4.2.0, "интервала")
  • "плавание" (только возможный, так как PHP 4.2.0, для более старых версий используют вариант устаревший "дважды")
  • "строка"
  • "массив"
  • "объект"
  • "пустой указатель" (начиная с PHP 4.2.0)

[: D Сначала посещают, сначала комментируют...]

6
ответ дан Shad 26 November 2019 в 19:25
поделиться

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

Это называют тип, подсказывающий . Согласно документации PHP, которую я просто связал с, да, это действительно накладывает ограничения на тип аргумента: " Отказ удовлетворить тип подсказывают результаты в catchable фатальной ошибке. "

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

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

3
ответ дан Jeremy Ruten 26 November 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: