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

Php 不在对象上下文中使用$this-在Laravel控制器中,php,object,controller,laravel,unhandled-exception,Php,Object,Controller,Laravel,Unhandled Exception,我使用的是Laravel,我刚刚将在本地工作的代码移动到Live中,我的“用户”控制器中出现以下异常: Unhandled Exception Message: Using $this when not in object context 奇怪的是,这是一个类,在本地运行良好,所以我不希望解决方案使用静态表示法。只有当我把它推广到生活中,我才会犯这个错误。是不是Live中缺少的Laravel内核中的某些东西没有正确加载控制器类 有人在推广他们的代码后经历过这种情况吗?有什么想法吗 更新:发生错

我使用的是Laravel,我刚刚将在本地工作的代码移动到Live中,我的“用户”控制器中出现以下异常:

Unhandled Exception
Message:
Using $this when not in object context
奇怪的是,这是一个类,在本地运行良好,所以我不希望解决方案使用静态表示法。只有当我把它推广到生活中,我才会犯这个错误。是不是Live中缺少的Laravel内核中的某些东西没有正确加载控制器类

有人在推广他们的代码后经历过这种情况吗?有什么想法吗

更新:发生错误的代码片段。请记住,此代码在本地工作,因此我认为缺少某些内容,而不是需要更改此代码来修复此问题


问题似乎是您在为
DB::transaction
函数提供的闭包中使用了
$this
,我不确定它为什么会在live local上工作,但您必须将控制器的实例导入到函数中才能使用它

为避免混淆,最好的方法是也给它加上别名,并可能通过引用传递它,这样就不会复制它,如:

$this_var = $this;
DB::transaction(function() use ($user_id, &$this_var as $controller) {
        $org = $this->create_org($user_id); //failing on this line with exception. btw $user is created fine
        $controller->create_contact($org->id);
        $controller->create_address($org->id);
});

我不完全确定语法是否完美,但逻辑是合理的。

问题似乎是您在为
DB::transaction
函数提供的闭包中使用了
$this
,我不确定它为什么会在live local上工作,但必须将控制器实例导入函数才能使用它

为避免混淆,最好的方法是也给它加上别名,并可能通过引用传递它,这样就不会复制它,如:

$this_var = $this;
DB::transaction(function() use ($user_id, &$this_var as $controller) {
        $org = $this->create_org($user_id); //failing on this line with exception. btw $user is created fine
        $controller->create_contact($org->id);
        $controller->create_address($org->id);
});

我不完全确定语法是否完美,但逻辑是合理的。

您能发布堆栈跟踪和/或完整的函数/类代码吗?这将有助于我们准确定位问题:)我刚才也注意到了-这是一个静态函数吗<代码>$this在静态函数中不起作用。谢谢Daniel,刚刚用代码片段更新。否对$this的引用带有一个非静态的控制器函数。它在我的笔记本电脑上本地运行良好:-0添加了我的答案,尝试一下,希望这能帮你解决:)你能发布堆栈跟踪和/或完整的函数/类代码吗?这将有助于我们准确定位问题:)我刚才也注意到了-这是一个静态函数吗<代码>$this在静态函数中不起作用。谢谢Daniel,刚刚用代码片段更新。否对$this的引用带有一个非静态的控制器函数。它在我的笔记本电脑上本地运行良好:-0添加了我的答案,尝试一下,希望这能帮你解决:)谢谢Daniel,尽管它没有解释为什么它在本地运行,而不是在我将代码发送到Live时运行?我在想生活中缺少了什么,但不确定是什么?根据你的回答,它不应该也在本地失败吗?!应该是的。但是,如果您在本地运行PHP5.4,则它们似乎支持
$this
,如果您的主机正在运行PHP5.3,则这可以解释差异。请参阅上的答案以获取示例。顺便说一句,我们刚刚尝试了您的建议,并得到以下错误:未处理的异常消息:无法将$this用作词法variable@user1746582啊,好的,,希望我已经编辑了解决方案来解决这个问题。谢谢Daniel,虽然它没有解释为什么它在本地工作,而不是在我将代码发送到Live时工作?我在想生活中缺少了什么,但不确定是什么?根据你的回答,它不应该也在本地失败吗?!应该是的。但是,如果您在本地运行PHP5.4,则它们似乎支持
$this
,如果您的主机正在运行PHP5.3,则这可以解释差异。请参阅上的答案以获取示例。顺便说一句,我们刚刚尝试了您的建议,并得到以下错误:未处理的异常消息:无法将$this用作词法variable@user1746582啊,好的,,我已经编辑了解决方案,希望能解决这个问题。