无法访问函数内部的变量

时间:2017-05-03 08:45:12

标签: php laravel function laravel-5

在模型中,我得到了一个包含3个参数$query$sort_by$sort_dir的范围函数,我可以在连接函数之前访问它们,但出于某种原因,我不能访问连接函数。

为什么呢?我错过了什么吗?

public function scopeOrder($query, $sort_by=false, $sort_dir='ASC'){

    if(!$sort_by)
        return $query;

    var_dump($sort_dir); //prints 'ASC'

    return $query->join('product_translations', function($q){

        var_dump($sort_dir); //variable undefined <----- ERROR

        $q->on('product_products.id', '=', 'product_translations.product_id')->where('product_translations.locale', '=', 'de');

    })->select('product_products.*')->orderBy('product_translations.name');

}

4 个答案:

答案 0 :(得分:7)

您需要使用use关键字:

return $query->join('product_translations', function($q) use ($sort_dir)

<强>解释

这是anonymous function。因此,变量在该函数内失去其范围。您需要使用PHP中的use

使变量可用于该函数

答案 1 :(得分:1)

您需要将参数传递给匿名函数,只传递$q,除非使用use($var)传递给函数,否则无法在函数内部看到任何变量

答案 2 :(得分:1)

如果要使用函数中的变量,这是变量定义的另一个范围,则必须使用use语句:

return $query->join('product_translations', function($q) use ($sort_dir)

答案 3 :(得分:1)

使用use关键字在您的功能中访问它们