2009-12-14 25 views
2

我正在構建一個小的MVC系統(學習),我在查看文件中顯示變量時遇到了一些問題。__toString問題

這是從我的視圖類:

private $vars = array(); 

    public function __set($key, $value) 
    { 
     $this->vars[$key] = $value; 
    } 


    public function __get($key) 
    { 
     return $this->vars[$key]; 
    } 

    public function __toString() 
    { 
     return $this->vars[$key]; 
    } 

    public function show($file) 
    { 
     global $router; 
     $folder = strtolower($router->current_controller); 

     $path = VIEWPATH.$folder.'/'.$file.'.phtml'; 
     if (! file_exists($path)) 
     { 
      die("Template: $file, not found"); 
     } 
     include ($path); 
    } 

這裏是我的控制器:

$test = new View(); 
$test->name = 'karl'; 
$test->show('name_view'); 

和視圖文件(name_view)

echo $name // doesn't work 
echo $this->name // Works 

我在做什麼錯誤?也許我很想做出全球化的東西?

THX /托比亞斯

編輯:我剛纔解壓在視圖類權瓦爾陣列之前,包括我的視圖文件,然後它的工作。謝謝所有幫助。

+0

show()函數有什麼作用? –

+0

它包含視圖filde – sandelius

+0

您的問題不在於__toString()方法,而是將類變量作爲全局變量來訪問。 –

回答

6

__toString()中沒有$ key!

另外__toString()不接受任何參數!

這個測試吧:

public function __toString() 
{ 
    return json_encode($this->vars); 
} 

您的編輯後,我意識到,你的問題不是在__toString()方法(因爲你不使用它,你可以刪除它)。做echo $this->name是在你的案例中顯示你的視圖內的變量的正確方法,但是如果你只想做echo $name我可以建議一種不同的方法嗎?

function View($view) 
{ 
    if (is_file($view) === true) 
    { 
     $arguments = array_slice(func_get_args(), 1); 

     foreach ($arguments as $argument) 
     { 
      if (is_array($argument) === true) 
      { 
       extract($argument, EXTR_OVERWRITE); 
      } 
     } 

     require($view); 
    } 
} 

使用視圖功能是這樣的:

$data = array 
(
    'name' => 'karl', 
); 

View('/path/to/your/name_view.phtml', $data); 

現在應該只是做echo $name;工作,你可以,如果你想把它適應您的視圖類。如果這不起作用,請嘗試將name_view視圖擴展名更改爲.php

+0

好吧,我剛剛得到「未定義的變量:」 – sandelius

+0

它的工作原理是,嘗試將該方法放在視圖類中並執行'$ test = new View();'和'echo $ test;'您應該獲得所有變量。 –

+0

如果我在我的控制器中回顯$ test,則顯示json字符串。但是,我如何才能在視圖文件中找到每個變量呢? – sandelius