2012-01-04 9 views
7

Đối với một làn da mediawiki, tôi nhận được một lỗi cho đoạn mã sauHeredoc lỗi cú pháp

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

Lỗi này là syntax error, unexpected T_START_HEREDOC. Tôi đã kiểm tra cú pháp và tôi không biết có gì sai. Ngay cả tác giả của mã cũng không hiểu tại sao tôi lại gặp lỗi này khi tôi hỏi về git.

EDIT: định nghĩa lớp

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

[Heredocs dường như không làm việc trong các lớp học.] (Http://codepad.org/O4zy120L) Chỉ cần sử dụng dấu nháy đơn, tôi giả sử. – Ryan

+0

Bạn có gì trước tuyên bố này? –

+0

@minitech: Tôi đã phải sử dụng cái ác cần thiết này để nâng cấp bản đồ google. Việc đặt mã JS trong một lớp là khó chịu, nhưng nó cung cấp các lợi ích của OOP trong đó JS hiện đang ở một vị trí tập trung. –

Trả lời

7

PHP5.3.0 + là cần thiết cho khởi tạo đẳng cấp biến sử dụng heredoc, mã của bạn hoạt động tốt trong PHP 5.3

+0

Mediawiki 1.17.0 có phiên bản PHP 5.2.9 – yayu

+1

Điều này đã có vấn đề, mã trong OP trông giống như nó sẽ biên dịch. Đã được trên 5.3.x quá lâu, khó để nghĩ rằng những người khác thì không. –

+0

Tôi chỉ gọi nhà cung cấp dịch vụ lưu trữ dùng chung và họ yêu cầu tôi mua một tài khoản VPS với giá $ 40/tháng, vì họ không có kế hoạch nâng cấp cho đến khi một phiên bản ổn định đã được chứng minh. Tôi đoán tôi đang di chuyển. – yayu

1

Sản phẩm thẻ cuối heredoc thực sự thụt?

Điều đó không hoạt động tốt IIRC ...

4

Bạn thực sự muốn thực hiện điều đó trong khi khởi tạo biến thành viên? Có lẽ một con đường tốt hơn để mất sẽ là một cái gì đó như:

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

    } 
} 

Cũng lưu ý rằng các HEREDOC bế mạc phải tuôn ra chống lại lề trái, tôi đã thêm các wrapper lớp để cho bạn thấy những gì nó sẽ giống như thế.