如何使用此function
并仅通知第一个和最后一个arguments
?
function foo($first = false, $second = false, $third = false, $last = false)
{
if($first && $last)
{
echo 'ok';
}
}
我已经尝试了下面的代码,但它没有工作…
foo($first = true, $last = true);
PHP不像python那样使用命名参数。
然而,生活可以通过使用其他技术变得更容易,如…
修改函数的签名,以接受关联数组形式的参数
函数function foo($parameters)
{
// Provide default values if parameters are not specified
$first = isset($parameters['first']) ? $parameters['first'] : false;
$second = isset($parameters['second']) ? $parameters['second'] : false;
$third = isset($parameters['third']) ? $parameters['third'] : false;
$last = isset($parameters['last']) ? $parameters['last'] : false;
if($first && $last)
{
echo 'ok';
}
}
电话foo(['first' => true, 'last' => true]);
这种方法适用于有大量参数且变化足够大,并且函数内部逻辑复杂的情况,因此编写所有这些代码都是值得的。
然而,这不是很方便,因为默认值不是以一种明显的方式指定的,有额外的代码,而且很难跟踪参数的使用。
修改函数的签名,使其接受一个包含所有必要信息的形参对象
这是用于复杂签名的方法,特别是当你有一个使用相同参数的级联方法时。我喜欢它,因为它解决了通过处理管道传递多达10个查询参数的大问题。现在,当输入->
时,它只是一个对象,可以找到每个参数的用法和友好的可用参数的自动建议。
参数对象类
class ParameterObject
{
public $first = false;
public $second = false;
public $third = false;
public $last = false;
}
函数function foo(ParameterObject $paramObj)
{
if($paramObj->first && $paramObj->last)
{
echo 'ok';
}
}
电话$paramObj = new ParameterObject();
$paramObj->first = true;
$paramObj->last = true;
foo($paramObj);
注意!你可以修改对象,使用方法来设置参数,如果你在每个set
方法中返回$this
,这将为你提供链接的可能性。所以函数调用就像这样:
$paramObj = new ParameterObject();
foo($paramObj->setFirst(true)->setSecond(true));
maybe
foo(true, false, false, true);
或改变参数的位置,如
function foo($first, $last, $second=false, $third=false)
foo(true, true);
?
如果你想在PHP中使用函数的最后一个参数,你必须在它之前输入所有参数,并且你不能在调用函数时使用参数名。在swift等语言中可以调用带参数名的函数但在php中不能