在php中使用变量设置默认函数参数

时间:2010-10-05 10:21:25

标签: php function syntax

我想做点什么:

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

这是不可能的!

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

有人知道在php中是否可以执行类似的程序? 感谢。

5 个答案:

答案 0 :(得分:3)

像其他答案一样,你不能直接在PHP中这样做。我对这些情况的解决方案通常是使用类似的东西模仿行为

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

您最接近要求的功能是使用func_get_args()和相关功能(尽管在其他答案中已经说明,您的具体用例确实只需要在函数顶部有几行非常简单的代码。)

答案 4 :(得分:0)

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

试试这个:

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

不,你不能在函数参数中使用它。你为什么要那样?只是在身体功能中做到这一点。如果函数参数中没有逻辑,那就更好了。更清晰,更清晰,更可维护。

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

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