限制函数参数以允许特定值

时间:2014-07-11 01:28:39

标签: php function

我想限制某人可以在函数调用中赋给变量的值。 对于例如说我的功能是

function myFunction ($carType, $isOld , $something)
{
    //do what is required
}

我希望我能够限制$ carType,$ isOld只有某些值,比如来自给定的数组:

$carTypeValues = array ("car1", "car2", "car3");
$isOldValues = array (true,false);

我知道我可以将参数变量限制为某种类型。

我试图找到一种方法来做到这一点,但我找不到任何可以解决我想要的东西。我知道我可以在实际执行函数调用后检查该值,但是我正在寻找能够让用户最好能够使用选择器的东西:

myFunction (carType::car1, isOld::car2 , $something);

我不确定,这可能是:

myFunction (carType.car1, isOld.car2 , $something);

感谢您阅读本文

3 个答案:

答案 0 :(得分:1)

您是否正在寻找一种简单的验证方式来验证传递给您的函数的变量,就像这样?

function myFunction ($carType = null, $isOld = null, $something = null)
{
    $carTypeValues = array ("car1", "car2", "car3");
    $isOldValues = array (true,false);

    $strict = true; // strict comparison here? e.g. null == false if $strict is false

    if(
        !$carType || !$isOld                            // variables aren't empty?
        || !in_array($carType, $carTypeValues, $strict) // passed carType is ok?
        || !in_array($isOld, $isOldValues, $strict)     // passed isOld is ok?
    ) {
        // error, incorrect variable passed
        return false;
    }

    //do what is required
    return true;
}

这样您就可以检查传递的变量是 A。,还是 B。,它们存在于您定义的可接受选项数组中。


  

我知道我可以在实际执行函数调用后检查值,但是我正在寻找能够让用户最好能够使用选择器的东西

您不能像示例中那样指定选择器,但可以传递一个整数来表示数组键,从而避免复制变量的值:

function myFunction($carType = null, $isOld = null, $something = null) { 
    $carTypeValues = array ("car1", "car2", "car3");
    $isOldValues = array (true,false);  

    if(
        !$carType || $isOld
        || !array_key_exists($carType, $carTypeValues)
        || !array_key_exists($isOld, $isOldValues)
    ) {
        return false;
    }

    // handle OK
    return array(
        'car_type' => $carTypeValues[$carType],
        'is_old'   => $isOldValues[$isOld]
    );
}

myFunction(1, 0, 'foobar'); // array('car_type' => 'car2', 'is_old' => true);

答案 1 :(得分:1)

您可以通过多种方式实现此目标。快速而肮脏的方法是手动检查函数中的值并相应地处理它们:

function myFunction($carType, $isOld, $something)
{
    if (in_array($carType, array('car1', 'car2', 'car3'))) {
        echo 'Car type is valid';
    } 
    if (is_bool($isOld)) {
        echo 'Car age is valid';
    } 
}

另一种方法是使用验证输入的对象键入函数定义。 PHP不支持所有类型的类型提示,因此对象可能是要走的路,但这对于这种情况可能有点过分。

答案 2 :(得分:0)

PHP语言没有枚举类型(proposition only)。

但您可以通过安装特殊扩展程序获得splEnum

PHP and enumerations问题