PHP大括号和条件

时间:2012-10-15 12:06:56

标签: php braces

这条线是什么意思?

if ( ${fun("str1")} (fun("str2"), ${fun("str3")}) )

使用str2的参数返回值和名称 return_value_for_str3 的变量评估函数 returning_value_for_str1_of_fun()_ name

4 个答案:

答案 0 :(得分:3)

这将测试函数的返回值,该函数的名称是名为fun("str1")的变量中的值,并给出参数fun("str2")和名为fun("str3")的变量的值。< / p>

示例:

如果fun("str1")等于"x"fun("str2")等于34fun("str3")等于"y",则语句如下:

if ( $x (34, $y) )

答案 1 :(得分:2)

fun("str1")返回应该是变量名称的字符串,此变量的值是匿名函数(可能不是void并返回boolean),它首先得到两个参数,即返回值fun("str2")和second是变量的值,其名称与fun("str3")返回的字符串匹配。

答案 2 :(得分:1)

一些解决方法:

$func = 'fun';
$str3 = 'str3';

echo ${fun("str1")} (fun("str2"), ${fun("str3")}); // will output 'str2'

function fun($param1, $param2 = ''){

    if($param1 == 'str2' || $param1 == 'str3')
        return $param1;
    elseif($param1 == 'str1')
        return 'func';
    else
        echo ' you are done';


}

Evaluates as follows:
    fun("str1") -> 'func'
    ${fun("str1")} -> $func -> fun
    fun("str2") -> 'str2'
    fun("str3") -> 'str3'
    ${fun("str3")} -> $str3

    ${fun("str1")} (fun("str2"), ${fun("str3")})
    => $func ("str2", $str3)
    => fun("str2", "str3")
    => "str2"

答案 3 :(得分:1)

哇。这是令人费解的代码。让我们一点一点地检查它:

让我们从这开始:

fun("str1")

实际上,这只是对名为fun()的函数的函数调用,将字符串值作为参数传递。

此函数调用在代码中重复三次,使用不同的字符串作为参数。函数fun()本身不在你的示例代码中提供,所以我不知道它的作用,但考虑到上下文,我假设它返回一个字符串。

这引导我们进入下一个我们可以检查的位:

${fun("str1")}

PHP中的${...}语法获取大括号的内容并引用该名称的变量。

因此,例如,${"myvar"}$myvar相同。这称为动态变量名称。虽然它确实有其用途,但它是编写错误代码的一种非常简单的方法,难以阅读,理解或维护。你的例子绝对属于这一类。

但是,现在我们理解了语法,很容易看出它正在调用fun()函数调用的字符串输出,并将其转换为变量名。

进一步扩展,我们可以按如下方式重写代码,使其更清晰:

$var1 = fun("str1");
$var2 = fun("str2");
$var3 = fun("str3");
if ( $$var1 ($var2, $$var3) )

此处,$$var1被用作函数名称,以$var2$$var3作为参数调用。

所以在$var1中,我们有一个函数调用返回一个被引用为变量名的字符串,它被称为函数。

我们仍然不知道fun()函数返回什么,或者返回的变量名称是否有效,但我们可以做出一些假设,如$var1和{{1}需要填充有效的函数名称才能使您的代码行完全正常工作。

我们现在已经了解了整行代码,但仍然没有清楚地看到它试图实现什么(除了过于'聪明'和迟钝)。

这是非常非常写得不好的代码。它故意模糊,效率低下(即运行缓慢)。