无法解释的语法错误与逻辑或(||)



我在Mac上使用NetBeans,我在Linux的共享主机上运行CakePHP(尽管我不认为框架与它有任何关系)。这不是一个大问题,但它令人沮丧。

我想知道为什么我不能简单地这样做:

if($this->Session->read('User.value1') || $this->Session->read('User.value2')){
  ...
}

我得到的错误信息是:

Error: syntax error, unexpected '$this' (T_VARIABLE)

为什么有语法错误?我看不见。

我可以这样做,没有问题:

if($this->Session->read('value1')){
  ...
}

我也可以这样做,没有问题(||周围没有空白):

if($this->Session->read('User.value1')||$this->Session->read('User.value2')){
  ...
}

但是如果我在||操作符周围加上空格,它就停止工作了。或者更确切地说—这是最令人困惑的部分—有时当我在||运算符周围加上空格时,它会停止工作,有时它不会。

我认为这可能是Netbeans 7.4中的一个错误,但是当我忽略Netbeans的警告并试图运行代码时,PHP给了我同样的错误。

这是怎么回事?

我正在用NetBeans for MAC

什么时候空格不是空格?

当它是一个不间断的空格!

目的是:

" || "
207C7C20 (hex)

但实际上在源文件中几乎可以肯定的是:

" || "
207C7CA0 (hex)

(在堆栈溢出时它不会是,但我打赌它在源文件中)。

对于mac来说,问题是(使用我自己的键盘布局,但我假设它在你的情况下类似):

"|" = alt + 1
" " = alt + space (accidental)

输入,加上"| |"非常很容易在按下空格键时按住Alt键,并且:你会得到意想不到的"wat"语法错误,从表面上看是没有意义的,直到你意识到问题是什么。

的例子:

-> cat foo.php 
<?php
$foo = "x";
if (true || $foo) {
}
-> php -l foo.php 
Parse error: syntax error, unexpected '$foo' (T_VARIABLE) in foo.php on line 4
Errors parsing foo.php

相关内容

  • 没有找到相关文章

最新更新