【问题标题】:Using $this when not in object context in a Laravel controller在 Laravel 控制器中不在对象上下文中时使用 $this
【发布时间】:2017-04-17 05:08:45
【问题描述】:
我在控制器中创建了一个公共静态函数,我需要访问在构造函数中设置的类属性。我通常使用$this->something 来访问这样的类属性,但这一次,我得到了这个错误:
当不在对象上下文中时使用$this
代码如下:
public static function PayExecute() {
$paymentId = Input::get('paymentId');
$PayerID = Input::get('PayerID');
$cont = $this->apiContext;
}
【问题讨论】:
标签:
php
laravel
object
properties
static
【解决方案1】:
您需要将$apiContext 声明为静态属性,并且您需要使用static 的self 关键字。像这样的:
class YourController extends BaseController
{
private static $apiContext = '';
public static function PayExecute()
{
$paymentId = Input::get('paymentId');
$PayerID = Input::get('PayerID');
$cont = static::$apiContext;
}
}
顺便说一句:请注意static 是后期静态绑定这一事实。
【解决方案2】:
您必须创建新实例,然后才能访问其属性
public static function PayExecute() {
$paymentId = Input::get('paymentId');
$PayerID = Input::get('PayerID');
$cont = (new static)->apiContext;
}
【解决方案3】:
您不能在静态方法中使用“$this”。
您确实可以访问“self::”,但请记住,您无法访问需要实例化当前类的方法/属性。