当使用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
答案 0 :(得分:7)
答案 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