2014-07-11 35 views
1

我想限制某人在我的函数调用中可以分配给某个变量的值。 例如说我的功能是限制函数参数以允许特定值

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); 

感谢您阅读本

+0

有人从架子上选择了PHP书而不是C :-D – zerkms

+0

是啊..我实际上更多的是Java开发人员,而PHP相对较新,松散语言也有一些缺点:) – user2636664

回答

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); 
+0

是的,我知道我可以这样做,正如我在我的问题中所说的那样,但是我正在寻找可以提示或提醒用户的东西。我并不是说这一定是可能的。 – user2636664

+0

如果这是类的一部分,您可以将可能的值设置为公共属性,并有一个返回它们的方法,以便向用户提供可能的选项... –

+0

这是一个独立函数,而不是类。谢谢 – user2636664

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'; 
    } 
} 

的另一种方法是typehint与验证输入的对象的函数定义。 PHP不支持所有类型的类型提示,因此对象可能是要走的路,但这可能会导致这种情况的矫枉过正。

+0

是的,我知道我可以这样做,就像我在我的问题中所说的那样,但是我正在寻找一些可以提示或告诉用户调用函数的东西,它不正确。我开始认为这可能不值得打扰......在stackoverflow上有一些非常棒的用户(像你自己一样),有很多人让我感到惊讶,因此我想问一下我是不是在想什么。谢谢 – user2636664

+0

我认为你正在尝试做一些PHP根本无法做到的事情。它不支持枚举类型提示或任何比基本对象和数组提示更复杂的东西。如果你需要这个级别的控制,你会用另一种语言更好。祝你好运! –

+0

我同意你@ orciny,谢谢你的帮助 – user2636664