我想创建一个可以在参数中接受多个,可选和附加值的函数。
例如,我想要一个班级
class Pizza {
public function addToppings($additional_toppings)
{
}
}
我可以在我的程序中使用
$pizza1=new Pizza;
$pizza1->addToppings(SALAMI + HAM + BACON + ADDITIONAL_CHEESE);
$pizza2=new Pizza;
$pizza2->addToppings(HAM + PINEAPPLE + SAUSAGE);
其中浇头可以是任何组合,主题的选择属于预定义的集合。
如何实现addToppings功能?
我似乎记得在PHP中看到类似的东西,但我无法记住它。
另一方面,您会建议使用关联数组吗?
$pizza1->addToppings(array('salami','ham','bacon','additional_cheese'));
$pizza2->addToppings(array('ham','pineapple','sausage'));
这个选项似乎更简单,但我希望得到您选择的想法以及原因。感谢
修改
我现在记得有一个这样的PHP实现。
error_reporting函数允许指定多个加法error level constants作为参数,例如:
error_reporting(E_ERROR | E_WARNING | E_PARSE);
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
只允许使用error_reporting()的实现,因为它是PHP的一部分,但不能重新创建吗?
答案 0 :(得分:2)
你可以按照你建议的方式,传递数组,我的个人偏好就是这样做。但是PHP确实支持变量参数列表。
请参阅:http://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
使用变量参数,您可以使用func_num_args()
和func_get_args()
函数。
以下是一个例子:
<?php
addToppings('Cheese', 'Ham', 'Peppers');
function addToppings()
{
echo "Added " . func_num_args() . " toppings<br />";
var_dump(func_get_args());
}
?>
编辑以包含有关error_reporting()
功能
error_reporting()
函数仍然只接受一个参数,错误常量之间的管道符号是bitwise operator,因此它们计算为单个值。您可以为您的功能实现类似的功能,但这与披萨类比似乎并不实用。
有关按位操作的更多信息,请参见Wikipedia。