寻找更好的多类型验证

Searching for better multitype validation

我需要检查变量是否属于指定的标量类型 - 但我不能使用像 is_scalar 这样的通用函数 - 因为这也会接受我不想接受的那些类型(那种类型)。

可以逐步检查类型:

但有点不舒服,因为它会给出很长的代码。

因此,我准备了以下(相对较短 - 如果您忽略 外部 部分)代码:

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

哪里

函数Show_Options_Scalars()表示允许接受的标量类型。

那个准备允许类型的数组 - 从接口中编写的常量。这就是为什么我写道如果忽略 external 部分,自己的验证相对较短。

而且我仍然不确定是否可以更好地完成多类型验证 - 这意味着我是否可以通过其他更好的方式验证变量类型。 外部代码不是搜索更好的多类型验证的原因。

我喜欢你的代码。我只会为它做一个函数

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

我用 & 来节省一些资源。

用法:

if( val( $test ) ) die( 'pass' );

我不确定我是否完全理解你的问题。但是

以下函数将允许您输入变量和 'legal' 类型数组。

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

所以,

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

会returntrue。同时:

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

会 return false.