2010-03-26 6 views
2

que quelqu'un peut me dire pourquoi je ne peux pas écrire une classe comme suitproblème de définition de classe

<?php 
class Foo 
{ 
?> 
<?php 
     function bar() { 
      print "bar"; 
     } 
} 
?> 

Je pense qu'il est le même que

<?php 
class Foo 
{ 
     function bar() { 
      print "bar"; 
     } 
} 
?> 
+0

ce qui est une erreur? – Andrey

+0

Erreur d'analyse: erreur de syntaxe, inattendue ';', s'attendant à T_OLD_FUNCTION ou T_FUNCTION ou T_VAR ou '}' dans /home/beiju/beiju.info/testscripts/clas.php à la ligne 4 – Young

Répondre

8

Je suppose qu'il est à cause de cette (quoting la section Séparation des instructions du manuel):

The closing tag of a block of PHP code automatically implies a semicolon


Cela signifie que votre code:

<?php 
class Foo 
{ 
?> 
<?php 
     function bar() { 
      print "bar"; 
     } 
} 
?> 

est le même comme:

<?php 
class Foo 
{; 
    function bar() { 
     print "bar"; 
    } 
} 
?> 

Ce qui explique l'erreur que vous obtenez:

Parse error: syntax error, unexpected ';', expecting T_FUNCTION 



EDIT: Penser un peu plus à ce sujet, je pensais que cela était étrange, étant donné que je l'utilise souvent des trucs comme ça dans mes modèles fichiers:

<?php if (...) : ?> 
    blah 
    blah 
<?php endif ; ?> 


J'ai donc essayé ceci:

<?php 
if (true) 
{ 
?> 
<?php 
    echo "Hello, World!"; 
} 
?> 

Et il fonctionne parfaitement bien. OK ...
Maintenant, nous allons essayer d'ajouter le ;, comme ?> est censé faire:

<?php 
if (true) 
{; 
    echo "Hello, World!"; 
} 
?> 

Cela fonctionne bien aussi, et je reçois la sortie suivante:

Hello, World! 


Et, si le changement de la condition, juste pour être sûr:

<?php 
if (false) 
{; 
    echo "Hello, World!"; 
} 
?> 

Donne n o sortie, et pas d'erreur.


Compte tenu de la phrase que je citais plus tôt, ce n'est pas si surprenant ... Mais, encore, je suis surpris de toute façon ^^

+0

ouais, vous avez raison, totalement identique infos d'erreur. – Young

2

?>...<? est syntaxiquement une déclaration, comme « echo », ou "retour", donc le premier est le même que

<?php 
class Foo 
{ 
    echo ""; 

    function bar() { 
     print "bar"; 
    } 
} 

ce qui n'est pas autorisé