如何仅通知函数的第一个和最后一个参数?

时间:2016-11-10 15:42:41

标签: php function

我如何使用此function并仅通知第一个和最后一个arguments

功能

function foo($first = false, $second = false, $third = false, $last = false)
{
  if($first && $last)
  {
    echo 'ok';
  }
}

我已尝试过下面的代码,但它没有工作......

foo($first = true, $last = true);

3 个答案:

答案 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中调用