В 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, вы должны быть очень осторожны при извлечении, изменении и сохранении. к типу данных enum обратно в вашу базу данных.
person
mlg
schedule
07.05.2016