在Yii中不在对象上下文中时使用$ this

时间:2013-05-02 05:32:45

标签: php yii yii-extensions yii-components yii-events

当使用EasyTabs扩展程序中的控制器操作调用视图文件时,我收到类似Fatal error: Using $this when not in object context in ..\controllers\ServiceRequestController.php on line 661的错误。
我在视图文件中调用控制器操作这样ServiceRequestController::actionTest(); < br />和控制器中

     public static function actionTest()  
   {
        $this->redirect('test');
    }

我怎样才能摆脱这个错误?当我用Google搜索时,我发现$this cannot be used in a static method.。所以我尝试在我的视图文件中使用了$model = new ServiceRequest(); $model->Test();。但它将错误显示为ServiceRequest and its behaviors do not have a method or closure named "actionTest". 任何人都可以帮我修复错误吗?提前致谢 我尝试使用此链接修复。但我认为我错了。 PHP Fatal error: Using $this when not in object context

4 个答案:

答案 0 :(得分:7)

定义操作时,请勿使用关键字static

您可以在此处阅读有关静态方法和属性的更多信息:

http://de1.php.net/manual/en/language.oop5.static.php

答案 1 :(得分:0)

使用$ this关键字时,对象需要在某个时刻进行实例化。如果你有课:

class Example {

    private $word = 'hello';

    public static function hello() {
        echo 'I can be called by writing:';
        echo 'Example::yo()';
    }

    public function world() {
        echo 'If this class has been instantiated, ( new Example; )';
        echo '$this->word will be hello';
        echo 'If this class hasn't been instantiated, you will get your error';
    }
}

类的特定实例可以从其内部的方法称为$ this。

你可以写:

$example1 = new Example;
$example2 = new Example;
$example3 = new Example;

在$ example1中,$ this将引用$ example1从其外部引用的相同内容。所以你可以像这样更改$ example1的$ word:

$example1->word = 'yo';    // from outside of the class
$this->word = 'yo';        // from inside of the class

在使用new关键字实例化类之前,还没有$ this存在。该类是一个蓝图,您可以使用new关键字从中创建对象,然后可以将其作为$ this引用。

答案 2 :(得分:0)

试试这个

   self::actionTest();

而不是

   ServiceRequestController::actionTest();

答案 3 :(得分:0)

我通过更正我的网址修复了yii2的错误,例如

 http://localhost/e-compare2/backend/web/index.php?r=crud/make