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

Dro*_*ial 9 php netbeans

我正在使用NetBeans for Mac,我正在Linux中运行CakePHP(虽然我不认为框架与它有任何关系).这不是一个大问题,但令人沮丧.

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

if($this->Session->read('User.value1') || $this->Session->read('User.value2')){
  ...
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

Error: syntax error, unexpected '$this' (T_VARIABLE)
Run Code Online (Sandbox Code Playgroud)

为什么会出现语法错误?我看不出来.

我可以毫无问题地做到这一点:

if($this->Session->read('value1')){
  ...
}
Run Code Online (Sandbox Code Playgroud)

我也可以毫无问题地做到这一点(没有空白||):

if($this->Session->read('User.value1')||$this->Session->read('User.value2')){
  ...
}
Run Code Online (Sandbox Code Playgroud)

但如果我在||操作员周围放置空格,它就会停止工作.或者更确切地说 - 这是最令人困惑的部分 - 当我在操作员周围放置空格时,它有时会停止工作||,有时则不会.

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

这里发生了什么?

AD7*_*six 15

我正在使用NetBeans for MAC

什么时候空间不是空间?

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

目的是:

" || "
207C7C20 (hex)
Run Code Online (Sandbox Code Playgroud)

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

" || "
207C7CA0 (hex)
Run Code Online (Sandbox Code Playgroud)

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

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

"|" = alt + 1
" " = alt + space (accidental)
Run Code Online (Sandbox Code Playgroud)

所以打字,使用序列"||",当空格键被按下时,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
Run Code Online (Sandbox Code Playgroud)

  • 冬青#$%||&=¿/ !!! 我的天啊!我知道我没有疯!至少没有那么疯狂!我尝试了“ alt +空格”,并且发生了错误,删除了该空格,错误消失了……非常感谢@ AD7six! (2认同)