【问题标题】:PHP: function passing large amount of array as a parameterPHP:函数将大量数组作为参数传递
【发布时间】:2013-01-12 08:33:55
【问题描述】:

我需要创建一个函数,它有大量参数可以是空值或值。现在我正在创建如下示例的函数:

function container($args){

    $args += array(
            'limit'             =>      10,
            'container'         =>      null,
            'container_class'   =>      null,
            'list_class'        =>      null,
        );

    echo'<'.$args['container'].' class="'.$args['container_class'].'" >';

    echo 'My function will have other content here with the '.$args['limit'];

    echo '<ul class="'.$args['list_class'].'" >';
    echo '<li>list itme here</li>';
    echo '</ul>'

    echo '</'.$container.'>';    

}

如果我必须在数组中传递 4-5 个值,这很好,但如果我有超过 15-20 个键要传递怎么办?必须有一些合适的方法来实现。

那么我怎样才能以如此有效的方式创建一个函数来传递许多数组键作为参数呢?

非常感谢

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    15-20 键并不是一个大数组。当您需要考虑如何将某些内容传递给 args 时,就是当您拥有 1000 多个键时。

    无论如何,您都可以使用“通过引用传递”概念(请参阅http://php.net/manual/en/language.references.pass.php)。当您必须在没有任何返回语句的情况下将变量修改为函数时,此概念很有用。 但是为了实现这个目标,PHP 只需发送一个引用内存中变量的键,而不是发送变量的副本。

    而且这个键不依赖于变量的大小。

    如何使用?通过在函数声明中使用 & 符号 例如:

    function container(&$args) 
    {
        // your function
    }
    
    $args = array(1, 2, 3 ..., 100000);
    container($args);
    

    但是如果你使用“通过引用传递”的概念,请注意不要修改 $args 否则 $args 将在主脚本上被修改。

    最终世界:如果你有少于 50 个键不关心如何传递你的 args,只使用复制(默认行为)会更安全!

    【讨论】:

    • 我正在查看您提供的参考资料。与此同时,我仍然对&amp; 和你关于$args$args 的最后陈述感到困惑。你能帮我说得更清楚吗?
    • 我为您创建了一个更详细的示例:codepad.org/fG7Rs5TA。如您所见,使用引用或复制变量没有差异,只是声明不同。但是就像我说的,如果你在函数中修改变量,在使用引用时要小心,它也会在主脚本上被修改(如示例)
    • PHP 仅在内容发生更改时才真正复制可变内容。所以这里可能不需要传递引用。
    • @dualed 我不知道。所以如果像你说的那样你是真的。但是您有任何引用此行为的链接吗?
    【解决方案2】:

    Kakawait 的最后一句话是真的。

    您应该在调用函数时使用$args 而不是&amp;$args

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2021-02-23
      • 2014-12-08
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2016-06-12
      相关资源
      最近更新 更多