帮助理解PHP5错误

时间:2011-03-01 16:03:34

标签: static-members php

总之......问题是......“说什么?”要扩展......“我没有得到错误”

  

严格标准:非静态方法Pyro \ Template :: preLoad()不应该静态调用,假设$ this来自/ opt / lampp / htdocs / dc / pyro / app / controllers / admin / courses中的不兼容上下文。第14行的PHP

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);
    }
}

为什么会出现此错误?干杯

4 个答案:

答案 0 :(得分:2)

preLoad功能不是静态的。这意味着只有类Template的对象才能使用此方法。静态方法独立于类的任何对象。

Template :: preLoad是静态调用:您没有创建Template对象,然后调用preLoad方法。所以基本上,你有两个解决方案:

  • 使preLoad静态;
  • 创建一个Template对象,然后调用其preLoad函数。

答案 1 :(得分:0)

preLoad函数应该是静态的

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

答案 2 :(得分:0)

preLoad函数不是静态的。 ti应该是这样的:

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

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

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

答案 3 :(得分:0)

就像所有人说的那样,你用静态方法调用函数:

Template::preLoad(xxx)

::表示PHP中的静态。函数通常称为静态::或对象->调用。

函数定义是一个或另一个:

public static function preLoad($template, $page)

称为:Template::preLoad('admin/courses/index', $this->data);

public function preLoad($template, $page)

称为Template->preLoad('admin/courses/index', $this->data);

作为参考,可以在不实例化对象的情况下调用静态函数。如果您的函数不需要运行对象,则可以将其设置为静态。基本上,这意味着您无法在静态方法中引用$this。它将使用给定的输入运行,而不必构造对象。