三元if语句涉及php类

时间:2012-01-28 19:13:16

标签: php

有人可以向我解释下面的php行吗?

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false;

我理解对象及其功能。如果$myobjectfunction被定义为eval $myobjectfunction,那么这个PHP会说,否则什么都不做?因为在我正在阅读的代码中,object尚未在此行之前定义(有时)。

4 个答案:

答案 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。

现在要做任何事情,确实需要定义“对象”

这是一段奇怪的代码,但我自己的诚实意见