sym2 IF 语句给出错误 "call to undefined function"

sym2 IF-statement gives error "call to undefined function"

我的 IF 语句显然有问题。

在 symfony2 控制器中,我有以下 PHP:

57   foreach($all as $t) {
58       if ( ($end == null) || ($t->getDate()->format('Y-m-d') <= $end->format("Y-m-d")) ) {
59           if ( ($start == null) || ($t->getDate()->format('Y-m-d') >= $start->format("Y-m-d")) ) {
60              $subset[] = $t;
61          }
62      }
63   }

我收到一条错误消息:

FatalErrorException: Error: Call to undefined function App\Bundle\Controller\ () in 
www/App/src/App/Bundle/Controller/TransactionController.php line 59

如果我像这样评论第二个 IF 语句,它运行时不会出错。

foreach($all as $t) {
    if ( ($end == null) || ($t->getDate()->format('Y-m-d') <= $end->format("Y-m-d")) ) {
        /*
        if ( ($start == null) || ($t->getDate()->format('Y-m-d') >= $start->format("Y-m-d")) ) {    
            $subset[] = $t;
        }
        */
    }
}

那么在我的 if 语句中某处它试图运行一个 sym2 控制器?我迷路了...

$start$end 都是有效的 DateTime 对象,$date$t 对象上也是有效的。

如果我 var_dump 在第二个 if 条件之前打印的变量:

开始: object(DateTime)#1149 (3) { ["date"]=> string(19) "2014-12-20 16:39:06" ["timezone_type"]=> int(3) ["timezone"]=> 字符串(13) "Europe/Berlin" }

结束: object(DateTime)#1150 (3) { ["date"]=> string(19) "2015-01-19 16:39:06" ["timezone_type"]=> int(3) ["timezone"]=> 字符串(13) "Europe/Berlin" }

t->getDate(): object(DateTime)#1046 (3) { ["date"]=> string(19) "2012-12-11 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> 字符串(13) "Europe/Berlin" }

所以我不知道这是否是 symfony2 特有的东西,但是如果我将 IF 条件分成两个不同的部分,从而取消 OR 操作数 ||它实际上工作正常。

令人费解的部分是第一个 IF 语句(具有几乎相同的条件)没有问题。

                if ( $start == null ) {    
                    $subset[] = $t;
                }
                elseif ( $t->getDate()->format('Y-m-d') >= $start->format("Y-m-d") ) {
                    $subset[] = $t;
                }

错误本身看起来很可疑,名称space 和括号之间有白色space:

Call to undefined function App\Bundle\Controller\ ()

通常您会希望看到如下内容:

Call to undefined function App\Bundle\Controller\foo_function()

不管发生什么事,PHP 看到一个 "function" 和 "blank" 的名字。我以前遇到过这样奇怪的情况,当我打字非常快并且在插入文本时碰巧按下控制字符。它通常发生在 space 字符附近,因为在我的键盘上,控制字符位于 space 栏旁边。

复制它几乎是不可能的。最好的办法就是删除该行,然后慢慢地重新输入。

如果你执意要诊断它,那么在 GNU/Linux 你可以 "take the cat to the vet":

$ cat file.php
<?php if (1 == 1) echo 'hi';

$ cat -vet file.php
<?php if (1 == ^@1) echo 'hi';

我用我的编辑器在 if 语句中插入了一个空字节,它在正常检查中不会出现,但在提供给 "the vet" 时会显示。