我有一个像这样的班级

class View
{

// Parameter die an das template übergeben werden
protected static $params = Array();
// Parameter die vom Routing übergeben werden
public static $routeParams;
// haupttemplate
protected static $viewMainContent;
// view template
protected static $viewFileContent;
// view pfad
protected static $pathTpl;
// controller pfad
protected static $pathCtrl;

protected $login;



// ausgabe des templates
public static function get($view, $params = "", $master = "main"){

    $this->$login = new Login();

    self::$pathTpl = Config::get('SRVROOT') . '/views/';
    self::$pathCtrl = Config::get('SRVROOT') . '/controller/';
    self::$routeParams = $params;
    // prüfen ob main template oder custom

....................
....

另一个类是非静态类。 现在我想在静态类中加载非静态类。 我的View类我想使用Login类中的函数。

这是一个模板类,我在View类中有一个函数。 在这个函数中,我加载一个定义的控制器(xxx.php),在这个文件中我想使用所有类存在。

protected static function get_controller($file){
    $ctrlFile = self::$pathCtrl . $file.'.php'; 
    !file_exists($ctrlFile) || require_once($ctrlFile);

}

在函数中包含的文件中我有这个代码。

if($login->user()){ echo "Hallo ich bin eingeloggt"; }

浏览器中的错误

致命错误:未捕获错误:在第25行的/home/vagrant/Cloud/60_Projekte/SeitenVorlage/lib/class.templating.php中不在对象上下文中时使用$ this

我怎样才能做到这一点?

===============>>#1 票数:0

您应该将$ pathCtrl和其他属性定义为protected ,因为private会阻止访问扩展类中的属性/字段。

另外,我不认为从非静态类扩展静态类是一个好习惯(我可能是错的),认为它们用于不同的目的。

我将静态类用于服务和提供者,非静态用于对象。

更多对此问题的引用: public,private和protected之间有什么区别?

===============>>#2 票数:0 已采纳

您不能在静态函数中使用this 相反,尝试在静态函数中创建一个新对象:

$object = new Login();
$object->login();
.........

或者您可以将$ login更改为静态然后使用self

self::$login = new Login();

  ask by Neonlight translate from so

未解决问题?本站智能推荐: