三元if语句涉及php类

use*_*987 0 php

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

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false;
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ski 5

该行将函数的返回值赋给object::function('letsgo')变量$myobjectfunction.如果返回值是"truthy"值(求值为boolean TRUE),那么该变量的内容将被计算为PHP代码(eval).如果是初始回报FALSE,则不采取进一步行动.将false在年底基本上什么都不做.

这是有效的,因为PHP将从赋值中返回值,即使它通常不用于任何内容.但是,在您的代码位的情况下,赋值的返回用于确定三元运算符的哪个分支,因为它括在括号中.

$x = 3;
// returns 3 even if we don't use it...
Run Code Online (Sandbox Code Playgroud)

这是一个不寻常的习语,因为括号是在初始分配的周围.

   ($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false;
//^^---------------------------------------------^^^
Run Code Online (Sandbox Code Playgroud)

三元运算符的更典型用法是?根据右边的条件将左侧变量的输出分配给左侧的变量=:

$myobjectfunction = object::function('letsgo') ? $someothervalue : false;
Run Code Online (Sandbox Code Playgroud)