【发布时间】:2011-11-07 17:20:23
【问题描述】:
我的目标是在 if() 语句中加入一些复杂的逻辑。假设我有一个值数组,如果我的数组中的所有内容都不为零,我将执行一些代码。通常,我可以说$valid = true、foreach 我的数组,并在找到零时设置$valid = false。然后我会运行我的代码if ($valid)。或者,我可以将我的循环放入一个函数中,并将该函数放入我的if()。
但我很懒,所以我宁愿不要乱用一堆“有效”的标志,我也不想写一个只在一个地方使用的全新函数。
假设我有这个:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
我期待if 得到'foo',其评估结果为真。我的关闭提交给$q 并且语句执行。 $q 返回字符串 foo,并打印 'foo'。
相反,我收到错误 Object of class Closure could not be converted to string。
所以让我们试试这个吧:
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
我期待我的函数会返回 false 并且会打印 'true'。而是打印 'foo'。
我这样做的方式有什么问题?似乎它在说,“是的,这确实是一个函数!”而不是“不,因为函数评估为假”。有没有办法做我想做的事?
【问题讨论】:
-
您似乎将函数与其返回值混淆了。
-
我想我想要的更接近
if ( function() { return false; } () ) {,这显然在 Javascript 中有效,但在 PHP 中无效。 -
stackoverflow.com/questions/3568410/… call_user_func() 是我要找的。span>