Unexplained syntax error with logical OR ( || )

这一生的挚爱 提交于 2021-02-06 23:28:03

问题


I'm working with NetBeans for Mac, and I'm running CakePHP (though I don't think the framework has anything to do with it) in a shared hosting in Linux. This is not a big issue, but it is frustrating.

I wonder why I can't simply do this:

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

The error message I get is:

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

Why is there a syntax error? I can't see it.

I can do this with no problems:

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

I can also do this with no problems (no whitespace around ||):

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

But if I put spaces around the || operator, it stops working. Or rather — and this is the most confusing part — sometimes it stops working when I put spaces around the || operator, and sometimes it doesn't.

I thought this might be a bug in Netbeans 7.4, but when I ignored the warning from NetBeans and tried to run the code anyway, PHP gave me the same error.

What is happening here?


回答1:


I'm working With NetBeans for MAC

When is a space not a space?

When it's a non-breaking space!

The intention is:

" || "
207C7C20 (hex)

But what is actually in the source file is almost certainly:

" || "
207C7CA0 (hex)

(on stack overflow it won't be but I bet it is in the source file).

With a mac the problem is (using my own keyboard layout, but I am assuming it's similar in your case):

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

So typing away, with the sequence " || " it's very easy for the alt key to still be depressed when the space bar is pressed and: voilà you get unexpected "wat" syntax errors which at face value make no sense - until you realize what the problem is.

Example:

-> 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


来源:https://stackoverflow.com/questions/23660848/unexplained-syntax-error-with-logical-or

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!