В PHP нет встроенного способа, требующего, чтобы переданная строка имела определенное значение; даже в PHP7. Вы можете набирать типы объектов и массивы, о которых я знаю. Перечисления решат эту проблему, но PHP не поддерживает перечисления.
Если вам действительно нужно это, возможно, вам стоит подумать о строго типизированном языке программирования.
Если вы застряли с PHP
Простой способ вы можете убедиться, что ваша строка следующим образом некоторые правила, чтобы сделать это класс, который взрывается, если это не один из этих значений.
Попробуйте
<?php
class WeekDay {
private $value;
public function __construct($value) {
if (!in_array($value, ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']))
throw new Exception("Not a week day.");
else
$this->value = $value;
}
public function __toString() {
return $this->value;
}
}
function echoWeekDay(WeekDay $weekDay) {
echo $weekDay . "\n";
}
echoWeekDay(new WeekDay("Tuesday"));
echoWeekDay(new WeekDay("Saturday"));
Запуск с
~/Code/stack-overflow $ php enums.php
Tuesday
PHP Fatal error: Uncaught exception 'Exception' with message 'Not a week day.' in /Users/marianol/Code/stack-overflow/enums.php:8
Stack trace:
#0 /Users/marianol/Code/stack-overflow/enums.php(23): WeekDay->__construct('Saturday')
#1 {main}
thrown in /Users/marianol/Code/stack-overflow/enums.php on line 8
Fatal error: Uncaught exception 'Exception' with message 'Not a week day.' in /Users/marianol/Code/stack-overflow/enums.php:8
Stack trace:
#0 /Users/marianol/Code/stack-overflow/enums.php(23): WeekDay->__construct('Saturday')
#1 {main}
thrown in /Users/marianol/Code/stack-overflow/enums.php on line 8
Кстати, перечислений не используются в основном для аргументов функции типа, намекая на. Например, базы данных используют поля enum для оптимизации эффективности хранения (поскольку для перечислений требуется гораздо меньше места для хранения, чем для строк), и если ваш язык программирования не предлагает тип данных enum, вы должны быть очень осторожны при извлечении, изменении и сохранении к типу данных перечисления обратно в вашу базу данных.
хороший пункт о колонке базы данных. Я все еще придерживаюсь своего мнения, сколько строк используется в качестве аргументов функции при работе в качестве разработчика программного обеспечения? сколько?? и это всегда очень четко определенный набор строк, это не «хорошо делать то, что вы хотите». И нет способа выразить, что этот набор строк доступен. Очень жаль, что нужно обратиться за документами для каждой отдельной функции. – Toskan
@ Тоскан: И это хороший момент. Наличие компилятора (или интерпретатора) поможет вам найти большинство проблем - это именно то, что вы получаете с сильно типизированными языками. – mlg
ну да, правда, но статически типизированные языки тоже имеют недостатки. Это было бы достаточно хорошо, если бы тип hinting работал правильно в php, и были бы перечисления. Похоже, много спрашивать, но это действительно так. Интересно, как работает хинтинг типа python 3.x, поскольку он, как представляется, имеет перечисления с 3.4. Не имея таких вещей, просто программирование мыши. – Toskan