В поисках лучшей проверки нескольких типов

0

Мне нужно проверить, имеет ли переменная определенный скалярный тип, но я не могу использовать общую функцию, такую как is_scalar, потому что это будет принимать и те типы (этот тип), которые я не хочу принимать.

Постепенно можно проверять типы:

  • с встроенными функциями, такими как is_string
  • с раздельным сравнением значения, заданного gettype

но это немного неудобно, потому что это даст очень длинный код.

Итак, я подготовил следующий (относительно короткий - если вы игнорируете внешние части) код:

!in_array(gettype($Item), MarC::Show_Options_Scalars())

где

Функция Show_Options_Scalars() представляет допустимые допустимые скалярные типы.

Это готовит массив разрешенных типов - из констант, написанных в интерфейсе. Вот почему я написал, что собственная проверка относительно короткая, если вы игнорируете внешние части.

И все же я не уверен, что многопроцессорная проверка может быть выполнена лучше - это означает, что если я могу лучше проверить тип переменной другим способом. Этот внешний код не является основанием для поиска лучшей проверки многопоточности.

  • 0
    Какой вопрос?
  • 0
    Ваш вопрос до сих пор не ясен. Возможно, прочитайте это вслух другу и посмотрите, имеет ли это для них смысл.
Показать ещё 1 комментарий
Теги:
validation

2 ответа

1
Лучший ответ

Мне нравится ваш код. я бы только сделал для него функцию

 function val( &$value ) {
    return !in_array( gettype( $value ), array( 'boolean', 'integer', 'what ever' ) );
 }

Я использую & для сохранения некоторых res.

Useage:

if( val( $test ) ) die( 'pass' );
  • 0
    Инкапсуляция в функцию возможна, но это не имеет особого смысла, когда функция (например, Show_Options_Scalars() ) возвращает мне массив с допустимыми типами.
  • 1
    Тогда я не могу понять вашу цель. Вы можете выбрать различные типы переменных и заменить массив своей функцией. Нет возможности сделать код короче в вашем использовании.
Показать ещё 2 комментария
1

Я не уверен, что полностью понимаю ваш вопрос. Но.

Следующая функция позволит вам ввести как вашу переменную, так и ваш "законный" массив типов.

function validate($input, $allowed_types) {
    return in_array(gettype($input), $allowed_types);
};

Так,

validate('a great string which is a scalar!', ['string', 'float', 'blah']);

Вернется true. В то время как:

validate('a great string which is a scalar!', ['integer', 'float', 'blah']);

Вернет false.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню