2010-11-01 4 views
9

Ich lese gerade dachte php Doucmentation für heredocs, aber ich sah keine Möglichkeit, den Code richtig zu beabsichtigen. Ist das in PHP möglich?PHP: Verwenden der richtigen Einrückung mit Heredocs

Im Moment mache ich das, aber das ist schlecht für die Lesbarkeit.

<?php 

     if(something){ 
      ... 
      echo <<< END  
        This is a test. I am writing this 
        text out. 
END; 
     } # end of if statment 

Ich mag so etwas haben:

<?php 

     if(something){ 
      ... 
      echo <<< END  
        This is a test. I am writing this 
        text out. 
      END; 
     } # end of if statment 

Ich weiß, dass bash eine Methode, dies zu tun (obwohl ich kann mich nicht erinnern, was es ist), so dass ich mich gefragt, ob es möglich in php zu tun. Ich glaube nicht, aber ich dachte, ich würde fragen.

Antwort

7

Es ist eine Beschränkung von PHP richtig Heredoc Aussagen zu formatieren. Es ist ein Parser Einschränkung. Da die Dokumentation heißt es:.

Es ist sehr wichtig, dass die Zeile mit der schließ Kennung zu beachten, muss keine anderen Zeichen enthalten, mit Ausnahme möglicherweise ein Semikolon (;) das bedeutet besonders, dass t Der Bezeichner darf nicht eingerückt sein, und es dürfen keine Leerzeichen oder Tabulatoren vor oder nach dem Semikolon vorhanden sein. Es ist auch wichtig, zu erkennen, dass das erste Zeichen vor der Abschlusskennung ein Newline wie durch das lokale Betriebssystem definiert sein muss. Dies ist \ n auf UNIX Systemen, einschließlich Mac OS X. Das schließende Trennzeichen (möglicherweise gefolgt durch ein Semikolon) muss auch von einem Newline gefolgt werden.

Wenn diese Regel und die Kennung Schließung gebrochen wird, ist nicht „sauber“, es wird keine Schließen Kennung und PHP wird weiterhin die Suche nach einem in Betracht gezogen werden. Wenn eine korrekte Abschlusskennung nicht vor das Ende der aktuellen Datei gefunden wird, wird ein Parser Fehler in der letzten Zeile ergeben.

Es ist unbekannt, ob dies in der Zukunft von PHP gelöst werden wird.

2

AFAIK, das ist nicht möglich, müssen Sie heredoc Kennung ohne Leerzeichen/Tabs/Vertiefung setzen Schließen :(