2016-06-13 44 views
-1

我有下面這段PHP的,這是給我一個:「意外T_VARIABLE」(假定與HEREDOC)

Parse error: syntax error, unexpected '$author' (T_VARIABLE) in /var/www/html/blog/index.php on line 77

<?php 

class Post 
{ 
//Define placeholders 
public $title = 'Post Title'; 
public $timestamp = 'TIMESTAMP'; 
public $author = 'Author'; 
public $author_url = '/user/'. $author; 

$post_boilerplate = <<<EOF 
     <div class="blog-post"> 
     <h2 class="blog-post-title"> $this->title </h2> 
     <p class="blog-post-meta">$this->timestamp by <a href="$this->author_url">$this->author</a></p> 

     <p>Blah, blah, blah...</p> 
     </div><!-- /.blog-post --> 
EOF; 

public function print_post() { 
    echo $this->post_boilerplate; 
} 
} 

$post = new Post(); 
$post->print_post(); 
?> 

我試着註釋掉參考線作爲一個快速「修復',但那麼錯誤就會移動。

隨着

//public $author_url = '/user/'. $author;

我得到:

Parse error: syntax error, unexpected '$post_boilerplate' (T_VARIABLE), expecting function (T_FUNCTION) in /var/www/html/blog/index.php on line 79

註釋掉HEREDOC過「幫助」,在包含頁面獲取生成,顯然儘管有與失蹤的變量聲明錯誤,但顯然這並不是真正的解決方案。

任何人都可以闡明什麼是錯的?

+0

Heredoc文本不應縮進。 –

+0

從我讀過的東西,sych作爲http://stackoverflow.com/questions/4068556/php-using-proper-indentation-with-heredocs我得到的想法,它只是結束分隔符必須存在於一行本身。無論如何,刪除縮進並沒有解決問題:我仍然得到我引用的第一個錯誤。 –

回答

1

你不能以這種方式初始化類變量。

的一種方法是定義常量

define('AUTHOR',$author); 

//... 

public $author_url = '/user/'. AUTHOR; 

一種更好的方式是在構造函數初始化值。

function __construct() { 
    $this->post_boilerplate = " 
    <div class='blog-post'> 
    <h2 class='blog-post-title'> ".$this->title."</h2> 
    <p class='blog-post-meta'>".$this->timestamp." by <a href='".$this->author_url."'>".$this->author."</a></p> 

    <p>Blah, blah, blah...</p> 
    </div><!-- /.blog-post --> 
    "; 
} 
+0

這仍然是一個不變的標量表達式;這將仍然是PHP 5.5以上的語法錯誤。 – mario

+0

@mario謝謝你的提示!我不知道。 OP至少必須是當前的,否則他們會在'$ title'處得到一個錯誤。 –

+0

確實會偶然發現heredoc。所以構造函數方法在這裏是唯一的選擇。 – mario