逻辑OR(||)的原因不明的语法错误

时间:2014-05-14 17:02:20

标签: php netbeans

我正在使用NetBeans for Mac,我在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给了我同样的错误。

这里发生了什么?

1 个答案:

答案 0 :(得分:14)

  

我正在使用NetBeans for MAC

空间何时不是空格?

当它是non-breaking space时!

目的是:

" || "
207C7C20 (hex)

但源文件中的实际内容几乎可以肯定:

" || "
207C7CA0 (hex)

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

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

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

所以打字,使用序列“||”,当按下空格键时,仍然可以轻松按下 :vo你得到意外的“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