2011-03-01 147 views
0

總之..問題是......「說什麼?」擴展名爲「我沒有收到錯誤」幫助理解PHP5錯誤

嚴格標準:非靜態方法Pyro \ Template :: preLoad()不應該靜態調用,假設$ this來自/ opt中的不兼容上下文在線/lampp/htdocs/dc/pyro/app/controllers/admin/courses.php 14

public function actionIndex() { 
    $this->data->users = $this->DB->query("SELECT id, name, description FROM :@courses")->getAll(); 
    $this->data->title = 'Courses'; 
    $this->data->content_area = \Pyro\Template::preLoad('admin/courses/index', $this->data); // Line 14 
} 

模板...它不完全...

<?php 
namespace Pyro; 

class Template { 

    // Stores default master template 
    public static $defaultTemplate = 'template.php'; 

    public function preLoad($template, $page) { 
     ob_start(); 

     include(VIEWS . "{$template}.php"); 

     $buffer = ob_get_contents(); 
     @ob_end_clean(); 
     return $buffer; 
    } 

    public function load($page) { 
     include(VIEWS . self::$defaultTemplate); 
    } 
} 

爲什麼這個錯誤出現?乾杯

回答

0

preLoad功能應該是靜態

public static function preLoad($template, $page) { 
0

預載功能也不是一成不變的。 ti應該看起來像這樣:

public static function preLoad($template, $page) { 
     ob_start(); 

     include(VIEWS . "{$template}.php"); 

     $buffer = ob_get_contents(); 
     @ob_end_clean(); 
     return $buffer; 
    } 
2

那麼preLoad函數不是靜態的。這意味着只有類模板的一個對象可以使用這種方法。靜態方法獨立存在於該類的任何對象中。

Template :: preLoad是一個靜態調用:你沒有創建一個Template對象,然後調用preLoad方法。所以基本上,你有兩種解決方案:

  • 使preLoad static;
  • 創建一個Template對象,然後調用它的preLoad函數。
+0

+1提供了一個很好的解釋+替代解決方案 – Capsule 2011-03-01 16:09:01

0

像大家所說,你作爲一個靜態方法調用的函數:

Template::preLoad(xxx)

::意味着在PHP中靜態的。通常將函數稱爲靜態::或對象->調用。

函數定義爲一種或另一種:

public static function preLoad($template, $page)

調用等:Template::preLoad('admin/courses/index', $this->data);

OR

public function preLoad($template, $page)

調用等Template->preLoad('admin/courses/index', $this->data);

作爲參考,可以在不實例化對象的情況下調用靜態函數。如果你的函數不需要運行一個對象,你可以使它靜態。基本上,這意味着你不能在靜態方法中引用$this。它將與給定的輸入一起運行,而不必構建對象。