这条线是什么意思?
if ( ${fun("str1")} (fun("str2"), ${fun("str3")}) )
使用str2的参数返回值和名称 return_value_for_str3 的变量评估函数 returning_value_for_str1_of_fun()_ name ?
答案 0 :(得分:3)
这将测试函数的返回值,该函数的名称是名为fun("str1")
的变量中的值,并给出参数fun("str2")
和名为fun("str3")
的变量的值。< / p>
示例:
如果fun("str1")
等于"x"
,fun("str2")
等于34
,fun("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}需要填充有效的函数名称才能使您的代码行完全正常工作。
我们现在已经了解了整行代码,但仍然没有清楚地看到它试图实现什么(除了过于'聪明'和迟钝)。
这是非常非常写得不好的代码。它故意模糊,效率低下(即运行缓慢)。