ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 在不在对象上下文中时使用$this – Laravel 4

2019-07-03 13:18:47  阅读:277  来源: 互联网

标签:php scope this laravel


我在Contact.php模型中有这两种方法:

public function getSubscribers($listId)
{
    return $this->withTrashed()
        ->where(DB::raw("concat('',email * 1)"), '!=', DB::raw('email'))
        ->where('opt_out', '0')
        ->select('email')
        ->chunk(1000, function($results) use ($listId) { $this->subscribeEmails($listId, $results); });
}

public function subscribeEmails($listId, $subscribers)
{
    $emails = array();

    foreach ($subscribers as $key => $subscriber)
    {
        $memberActivity = $subscriber->memberActivity($listId);

        if ( ! $memberActivity['data'])
        {
            $emails[] = array('email' => $subscriber->email);
        }
        else
        {
            foreach ($memberActivity['data'] as $data)
            {
                foreach ($data['activity'] as $activity)
                {
                    if ($activity['action'] !== 'unsub')
                    {
                        $emails[] = array('email' => $subscriber->email);
                    }
                }
            }  
        }
    }

    MailchimpWrapper::lists()->batchSubscribe($listId, $emails, false, true);
}

并且通过名为updateMailchimp()的方法在我的AdminContactsController.php控制器中调用getSubscribers()方法:

public function updateMailchimp()
{
    $this->contact->getSubscribers($this->listId);

    $message = (object) array(
        'title'         => 'Excellent!',
        'content'       => 'The Mailchimp newsletter list has been updated with the latest contacts from within the system.',
        'alert_type'    => 'success'
    );

    return Redirect::back()->with('message', $message);
}

在本地,这很好,除了在登台服务器上没有任何问题,我得到以下错误引用行cotaining – > chunk(1000,函数($results)使用($listId){$this-> subscribeEmails( $listId,$results);});:

Using $this when not in object context

这是PHP版本问题还是我错过了什么?

解决方法:

您的代码在localhost上工作但在远程服务器上工作的原因可能与PHP版本不同.在PHP 5.4.0 it is not possible to use $this from anonymous function之前.您必须在use关键字中将引用传递给$this:

public function getSubscribers($listId)
{
    $that = $this; // <---- create reference to $this
    return $this->withTrashed()
        ->where(DB::raw("concat('',email * 1)"), '!=', DB::raw('email'))
        ->where('opt_out', '0')
        ->select('email')
        ->chunk(1000, function($results) use (&$that, $listId) { $this->subscribeEmails($listId, $results); });
}

标签:php,scope,this,laravel
来源: https://codeday.me/bug/20190703/1366976.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有