有人可以向我解释下面的php行吗?
($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false;
我理解对象及其功能。如果$myobjectfunction
被定义为eval $myobjectfunction
,那么这个PHP会说,否则什么都不做?因为在我正在阅读的代码中,object
尚未在此行之前定义(有时)。
答案 0 :(得分:5)
此行将函数object::function('letsgo')
的返回值赋给变量$myobjectfunction
。如果回报是" truthy" value(计算为布尔TRUE
),然后将该变量的内容计算为PHP代码(eval
)。如果初始回报为FALSE
,则不会采取进一步措施。最后的false
基本上什么也没做。
这是有效的,因为PHP将从赋值中返回值,即使它通常不用于任何内容。但是,在你的代码位的情况下,赋值的返回用于确定三元运算符的哪个分支,因为它括在括号中。
$x = 3;
// returns 3 even if we don't use it...
这是一种不寻常的习语,因为括号是在初始分配的周围。
($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false;
//^^---------------------------------------------^^^
三元运算符的一个更典型的用法是根据?
右边的条件,将=
任意一边的输出分配给左边的变量:
$myobjectfunction = object::function('letsgo') ? $someothervalue : false;
答案 1 :(得分:1)
很难准确地说出这里发生了什么。我假设您已经替换了实际值以“简化”示例,但关键字的使用实际上掩盖了这个问题。
类'object'的声明不需要在此语句之前,只要在代码执行期间的某个时刻定义了对象类。
答案 2 :(得分:1)
此代码相当于:
$myobjectfunction = object::function('letsgo');
if( $myobjectfunction ) {
eval( $myobjectfunction );
}
else {
false;
}
换句话说,将object::function( 'letsgo' )
的结果分配给变量。如果该变量是“truthy”(即不是false,null或0,或其他值为false的值),那么eval
其内容;否则什么都不做。
答案 3 :(得分:0)
你几乎得到了它,好吧它说IF $ myobjectfunction已成功返回一个正结果(即:not false,0或null)eval新变量对象,但我可能不会使用“false”in else位。,id probaby使用null。
现在要做任何事情,确实需要定义“对象”
这是一段奇怪的代码,但我自己的诚实意见