Мне нужно проверить, имеет ли переменная определенный скалярный тип, но я не могу использовать общую функцию, такую как is_scalar, потому что это будет принимать и те типы (этот тип), которые я не хочу принимать.
Постепенно можно проверять типы:
is_string
gettype
но это немного неудобно, потому что это даст очень длинный код.
Итак, я подготовил следующий (относительно короткий - если вы игнорируете внешние части) код:
!in_array(gettype($Item), MarC::Show_Options_Scalars())
где
Функция Show_Options_Scalars()
представляет допустимые допустимые скалярные типы.
Это готовит массив разрешенных типов - из констант, написанных в интерфейсе. Вот почему я написал, что собственная проверка относительно короткая, если вы игнорируете внешние части.
И все же я не уверен, что многопроцессорная проверка может быть выполнена лучше - это означает, что если я могу лучше проверить тип переменной другим способом. Этот внешний код не является основанием для поиска лучшей проверки многопоточности.
Мне нравится ваш код. я бы только сделал для него функцию
function val( &$value ) {
return !in_array( gettype( $value ), array( 'boolean', 'integer', 'what ever' ) );
}
Я использую & для сохранения некоторых res.
Useage:
if( val( $test ) ) die( 'pass' );
Show_Options_Scalars()
) возвращает мне массив с допустимыми типами.
Я не уверен, что полностью понимаю ваш вопрос. Но.
Следующая функция позволит вам ввести как вашу переменную, так и ваш "законный" массив типов.
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
.