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



如何使用此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中不能

相关内容

  • 没有找到相关文章

最新更新