我想限制某人可以在函数调用中赋给变量的值。 对于例如说我的功能是
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 :(得分: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)