【问题标题】:Help understanding PHP5 error帮助理解 PHP5 错误
【发布时间】:2011-03-01 16:03:34
【问题描述】:

简而言之……问题是……“说什么?”展开...“我没有收到错误”

严格标准:不应静态调用非静态方法 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);
    }
}

为什么会出现这个错误?干杯

【问题讨论】:

    标签: static-members php


    【解决方案1】:

    preLoad 函数不是静态的。这意味着只有类 Template 的对象可以使用此方法。静态方法独立于类的任何对象存在。

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

    • 将 preLoad 设为静态;
    • 创建一个模板对象,然后调用它的 preLoad 函数。

    【讨论】:

      【解决方案2】:

      preLoad 函数应该是静态的

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

      【讨论】:

        【解决方案3】:

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

        public static function preLoad($template, $page) {
                ob_start();
        
                include( VIEWS . "{$template}.php");
        
                $buffer = ob_get_contents();
                @ob_end_clean();
                return $buffer;
            }
        

        【讨论】:

          【解决方案4】:

          就像大家说的,你用静态方法调用函数:

          Template::preLoad(xxx)

          :: 在 PHP 中表示静态。函数通常被称为静态:: 或对象-&gt; 调用。

          函数定义二选一:

          public static function preLoad($template, $page)

          调用如下:Template::preLoad('admin/courses/index', $this-&gt;data);

          或

          public function preLoad($template, $page)

          像Template-&gt;preLoad('admin/courses/index', $this-&gt;data);一样调用

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

          【讨论】:

            猜你喜欢
            • 2011-10-26
            • 2015-09-16
            • 2023-03-21
            • 2017-04-07
            • 2018-05-04
            • 2018-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多