不在Laravel控制器的对象上下文中时使用$this

ztigrdn8  于 2022-12-14  发布在  其他
关注(0)|答案(5)|浏览(154)

我在一个控制器中创建了一个公共静态函数,我需要访问一个在构造函数上设置的类属性。我通常使用$this->something来访问这样的类属性,但是这次,我得到了这个错误:
不在对象上下文中时使用$this
代码如下:

public static function PayExecute() {
    $paymentId = Input::get('paymentId');
    $PayerID = Input::get('PayerID');

    $cont = $this->apiContext;
}
ffscu2ro

ffscu2ro1#

你需要将$apiContext声明为静态属性,并且你需要使用selfstatic关键字。

class YourController extends BaseController
{
    private static $apiContext = '';

    public static function PayExecute()
    {
        $paymentId = Input::get('paymentId');
        $PayerID = Input::get('PayerID');

        $cont = static::$apiContext;
    }
}

顺便说一句:请注意static是后期静态绑定。

6yjfywim

6yjfywim2#

你不能在静态方法中使用“$this”。虽然你可以访问“self::“,但是记住你不能访问那些需要示例化当前类的方法/属性。

8fq7wneg

8fq7wneg3#

此问题的根源是Excel类的示例化错误。
检查控制器。
错误:use Maatwebsite\Excel\Excel;
正确:use Maatwebsite\Excel\Facades\Excel;

svujldwt

svujldwt4#

在我的例子中,我有一个非静态的控制器函数(所以public function myFunc而不是public static myFunc),但是我忘记了静态调用该函数的一行(比如MyController::myFunc)。
删除此行修复了错误。
故事的寓意:当您的函数使用$this->something时,不要静态调用该函数:)

4sup72z8

4sup72z85#

必须创建新示例,然后才能访问其属性

public static function PayExecute() {
    $paymentId = Input::get('paymentId');
    $PayerID = Input::get('PayerID');

    $cont = (new static)->apiContext;
}

相关问题