【问题标题】:Setting default function parameters with variable in php在php中使用变量设置默认函数参数
【发布时间】:2010-10-05 10:21:24
【问题描述】:

我想做这样的事情:

function func($var1 = 'Hello', $var2 = "{$var1} World") { echo $var2; }

这是不可能的!

我的想法是在我的函数中避免额外的代码行,但我不知道这是否可能。

有人知道在 php 中是否可以使用类似的程序? 谢谢。

【问题讨论】:

  • 这是要实际测试第二个参数“包含”第一个参数吗?在那种情况下,我希望我们都在 PHP 中进行模式匹配,但不幸的是,情况并非如此......
  • 即把第一个参数值加上一些东西给第二个。我认为在这种情况下模式匹配没有意义。

标签: php function syntax


【解决方案1】:

就像其他答案所说,您不能直接在 PHP 中执行此操作。我对这些情况的解决方案通常是使用类似这样的东西来模仿行为

function func($var1 = 'Hello', $var2 = null)
{
  if ($var2 === null)
    $var2 = $var1.' Worls';
}

但最大的缺点是您正在复制 PHP 行为,因此当忘记变量、错误类型等时,您必须抛出自己的异常。

【讨论】:

  • 我只想避免 if 语句,但也许这是不可能的。
【解决方案2】:

在 php 本身中这是不可能的(如果我不习惯请纠正我)。 您要做的就是所谓的面向方面编程。 但我不知道任何可接受的 php 方面框架。 例如,在 java 中,您可以在调用某个 MyClass.method(); 之前使用 AspectJ 并运行代码;这样每次调用 MyClass.method();在它执行之前,一些其他代码将自动执行,而不会将其添加到 method() 方法本身。 这是通过在正确的位置自动插入代码来实现的。

【讨论】:

    【解决方案3】:

    如果您只想在 $var2 前面加上 $var1,那么您可以将其设置在函数的第一行,例如。

    function func($var1 = 'Hello', $var2 = " World") { 
        $var2 = $var1 . $var2;
        echo $var2; 
    }
    

    【讨论】:

    • 我知道我可以做这样的事情,但我想避免在我的函数中插入代码行,我问我这是否可能。
    【解决方案4】:

    我认为这里的基本答案是否定的,不可能按照您要求的方式进行。

    最接近您所要求的功能的是使用func_get_args() 和相关功能(尽管正如其他答案中所述,您的特定用例实际上只需要几个函数顶部的几行非常简单的代码)。

    【讨论】:

      【解决方案5】:

      PHP 中没有表达式语言,但可以使用运算符. 连接字符串。

      试试这个:

      function func($var1 = 'Hello', $var2 = ' Worls') { echo $var1.$var2; }
      

      不,你不能在函数参数中使用它。你为什么要那个?只需在 body 函数中执行此操作即可。如果函数参数中没有逻辑就更好了。更清晰、更易读、更易于维护。

      在性能方面也不是很好。您正在创建 $var1 默认值和 $var2 默认值之间的依赖关系。处理器可能出于任何原因(主要是优化)以相反的顺序分配默认值,但由于您引入了依赖项,因此无法再执行此操作,因此处理器必须等到$var1 解决后才能分配@ 987654326@。得到它?

      无论如何,语言不允许你这样做。但至少现在你可以有一个可能的原因(完全是我的假设,我敢肯定还有更多不同的原因)。

      【讨论】:

      • 我知道运营商 .可以连接字符串,但不能在函数参数中使用。
      猜你喜欢
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2015-01-04
      • 2010-12-23
      • 2015-01-27
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多