PDA

View Full Version : [PHP] Errore di sintassi ?


biowep
16-03-2013, 18:31
Ciao, non riesco in nessun modo a trovare l'errore qui dentro (ci ho perso mezz'ora) e sono arrivato alla conclusione che sia un bug di php. Possibile?
Per far sparire l'errore devo togliere if(DEBUG){}
L'errore sparisce anche nel caso in cui trasformo if(DEBUG){} con la sintassi alternativa
if(DEBUG): endif; Oppure nel caso in cui inverto le due condizioni nel ciclo
if($stack[$i] == Expression::$var):
elseif(get_class($stack[$i]) == 'Operator'):
endif;

for($i=0; $i<$length; ++$i):
if(get_class($stack[$i]) == 'Operator'):
//codice senza errori al 100%
if(DEBUG){
$tempStack = new Rpn($stack);
echo $tempStack->represent()."<br />\n";
}
elseif($stack[$i] == Expression::$var)://304
if($var) $stack[i] = $var;
else throw new Exception(M::VariableWithoutValue);
endif;
endfor;

Parse error: syntax error, unexpected ':' in C:\Program Files (x86)\EasyPHP-12.1\www\calculation.php on line 304

idoido
16-03-2013, 18:57
dal manuale php:
Mixing syntaxes in the same control block is not supported.

http://php.net/manual/en/control-structures.alternative-syntax.php

quindi se tu lasci if (DEBUG) {} dentro una struttura definita con l'altra sintassi è normale che ti vada in errore.
EDIT: rileggendo il codice l'errore dovrebbe essere che l'elseif dell' if(DEBUG) {} è definito poi con : endif; e quindi qui occorrerebbe il mixing che genera l'errore.

domanda: perché non usi la sintassi standard C-like?

biowep
16-03-2013, 20:07
dal manuale php:
Mixing syntaxes in the same control block is not supported.

http://php.net/manual/en/control-structures.alternative-syntax.php

quindi se tu lasci if (DEBUG) {} dentro una struttura definita con l'altra sintassi è normale che ti vada in errore.
EDIT: rileggendo il codice l'errore dovrebbe essere che l'elseif dell' if(DEBUG) {} è definito poi con : endif; e quindi qui occorrerebbe il mixing che genera l'errore.

domanda: perché non usi la sintassi standard C-like?
Ok adesso ho capito. Comunque non mi genera errore se porto l'else if prima dell'if nonostante quello che dicono.

Non uso la sintassi C like in questo caso perché dove compare //codice senza errori al 100% ci sono molto linee di codice che non rientrano in un'unica schermata quindi, per sapere dove viene chiuso l'if uso la sintassi alternativa. Più che altro per sapere quanto rientra a destra (perché ciò che ho incollato fa parte di altre strutture)