2012-01-04 23 views
7

Per una pelle MediaWiki, io sono sempre un errore per il seguente pezzo di codiceheredoc errore di sintassi

private $_sideboxf = <<<EOD 
     <h3>%s</h3> 
     <ul class="submenu"> 
      %s 
     </ul> 
EOD; 

L'errore è syntax error, unexpected T_START_HEREDOC. Ho controllato la sintassi e non so cosa sia sbagliato. Anche l'autore del codice non capisce perché sto ricevendo questo errore quando ho chiesto su git.

EDIT: definizione di classe

class SkinTemplate extends QuickTemplate 
{ 
    private $_sideboxf = <<<EOD 
    <h3>%s</h3> 
    <ul class="submenu"> 
     %s 
    </ul> 
EOD; 
// Some public function 
} // End of Class 
+1

[Heredocs a quanto pare non funzionano nelle classi.] (Http://codepad.org/O4zy120L) Basta usare le virgolette singole, suppongo. – Ryan

+0

Cosa hai precedente questa affermazione? –

+0

@minitech: ho dovuto usare questo male necessario per un aggiornamento di google maps. Mettere il codice JS all'interno di una classe è sgradevole, ma fornisce i vantaggi di OOP in quanto il JS è ora in una posizione centralizzata. –

risposta

7

PHP5.3.0 + è necessario per inizializzare variabili di classe utilizzando heredoc, il codice funziona bene in PHP 5.3

+0

Mediawiki 1.17.0 ha versione di PHP 5.2.9 – yayu

+1

Questo ha il problema, il codice in OP sembrava compilato. È stato su 5.3.x così a lungo, difficile pensare che gli altri non lo siano. –

+0

Ho appena chiamato il mio provider di hosting condiviso e mi hanno chiesto di acquistare un account VPS per $ 40/mese, poiché non avevano pianificato alcun aggiornamento fino a quando non si fosse stabilita una versione stabile e comprovata. Credo che mi sto muovendo. – yayu

1

è il tag fine del heredoc in realtà un rientro?

che non funziona bene IIRC ...

4

Vuoi davvero farlo heredoc durante membro inizializzazione delle variabili? Forse un percorso migliore per prendere sarebbe qualcosa di simile:

class MyClass 
{ 
    public function getSideBoxF() 
    { 
     return <<<EOD 
      Stuff goes here... 
EOD; 

    } 
} 

noti inoltre che il heredoc di chiusura deve essere a filo con il margine sinistro, ho aggiunto il wrapper di classe per mostrare che cosa dovrebbe assomigliare.