我如何使用此function
并仅通知第一个和最后一个arguments
?
功能
function foo($first = false, $second = false, $third = false, $last = false)
{
if($first && $last)
{
echo 'ok';
}
}
我已尝试过下面的代码,但它没有工作......
foo($first = true, $last = true);
答案 0 :(得分:2)
PHP不像python那样执行命名参数。有关详细信息,请参阅this question。
然而,通过使用其他技术可以使生活更轻松......
功能
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);
注意!您可以修改对象以使用方法设置参数,如果您在每个$this
方法中返回set
,则可以为您提供链接。所以函数调用就像这样:
$paramObj = new ParameterObject();
foo($paramObj->setFirst(true)->setSecond(true));
答案 1 :(得分:0)
也许
foo(true, false, false, true);
或更改参数的位置,如
function foo($first, $last, $second=false, $third=false)
foo(true, true);
答案 2 :(得分:0)
如果你想在php中使用函数的最后一个参数,你必须在它之前输入所有参数,并且在调用函数时你不能使用参数名。在像swift这样的语言中,可以使用参数名称调用函数,但不能在php中调用