【问题标题】:Pass undefined index into PHP function将未定义的索引传递给 PHP 函数
【发布时间】:2015-11-13 08:22:02
【问题描述】:

我有一个看起来有点像这样的函数:

function name( param1 = default, param2 = default, param3 = default) {...}

我通过将数组元素作为参数传递来调用函数,如下所示:

name( $param['foo'], $param['bar'], $param['hello'] );

我的问题是——如果函数调用中传递的一个(或多个)元素是未定义的,它是如何在函数本身中处理的?我问是因为我正在尝试调用该函数,但我无法知道是否定义了任何元素。

在函数内部,我尝试调试使用isset()is_null()empty() 传递的参数,结果分别为false、true 和true。这使我相信,由于实际上是在传递某些内容,因此未设置默认值。如果有人能解释如何处理这样的事情,我将不胜感激。

【问题讨论】:

  • 嗯,如果你传递数组值,为什么不传递数组本身呢?
  • @bksi 这完全有可能,但我在想,如果我确切知道我需要哪些数组元素,我不妨通过这些。
  • 你传的方法传入后可以查看。
  • 只有在没有传递参数时才使用默认值。如果你传递一个参数,它将被使用,即使它是未定义的。

标签: php parameter-passing argument-passing optional-parameters


【解决方案1】:

调用数组中未定义的索引会导致警告。

给你的两条规则:

  • 仅传递/使用已定义的事物
  • 永远不要禁用警告/错误

例子:

$params = ['foo' => 1, 'bar' => null, 'nextKey' => null];

一种常见的方法是传递(子)数组:

myMethod($params);

您的方法采用它需要的元素。

【讨论】:

    【解决方案2】:

    该函数通常没有线索,并且通常不关心参数来自何处。例如

    $x = 2;
    foo($x);
    foo(2);
    

    foo() 而言,它只会看到2 进来,没有什么会告诉它“this 2 is hardcoded”或“this 2 was pass in via a variable”。

    如果你传入一个未定义的变量,那么函数本身将看到一个null 值到达,PHP 会在函数代码有机会开始执行之前发出关于使用未定义变量的警告。

    【讨论】:

      【解决方案3】:

      简短的回答是它正在传递 NULL,它是一个常量值,指定用于表示空值或未初始化的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多