Вопрос

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?

Это было полезно?

Решение

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top