2012-01-04 35 views
7

Dla MediaWiki skóry, Otrzymuję błąd na następujący fragment koduskładni heredoc błąd składni

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

błąd jest syntax error, unexpected T_START_HEREDOC. Sprawdziłem składnię i nie wiem, co jest nie tak. Nawet autor kodu nie rozumie, dlaczego otrzymuję ten błąd, gdy zapytałem o git.

EDIT: definicja klasy

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

[Heredocs najwyraźniej nie działają w klasach.] (Http://codepad.org/O4zy120L) Po prostu użyj pojedynczych cudzysłowów. – Ryan

+0

Co masz przed tym stwierdzeniem? –

+0

@minitech: Musiałem użyć tego niezbędnego zła do aktualizacji map Google. Umieszczenie kodu JS w klasie jest nieprzyjemne, ale zapewnia zalety OOP, ponieważ JS znajduje się teraz w scentralizowanej lokalizacji. –

Odpowiedz

7

PHP5.3.0 + jest wymagany do inicjowania klasy zmiennych używając heredoc, Twój kod działa poprawnie w PHP 5.3

+0

Mediawiki 1.17.0 ma wersję PHP 5.2.9 – yayu

+1

To jest problem, kod w OP wyglądał tak, jakby się skompilował. Tak długo trwała 5.3.x, trudno myśleć, że inni nie są. –

+0

Właśnie nazwałem mojego współdzielonego dostawcę hostingu i poprosili mnie o zakup konta VPS za 40 USD/miesiąc, ponieważ nie planowali aktualizacji, dopóki nie dowie się o tym sprawdzona stabilna wersja. Chyba się ruszam. – yayu

1

Czy tag koniec heredoc faktycznie wcięte?

To nie działa dobrze IIRC ...

4

Naprawdę chcesz to zrobić heredoc podczas inicjalizacji zmiennej członkiem? Może lepsza droga do podjęcia byłoby coś takiego:

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

    } 
} 

również pamiętać, że heredoc zamykający musi być wyrównane do lewego marginesu, dodałem opakowanie klasy, aby pokazać, jak to powinno wyglądać.