PHP - Yii2变量范围

时间:2016-05-11 09:26:02

标签: php scope yii2

我有这样简单的PHP代码:

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\bvh\BvhFiles;
use app\models\bvh\BvhCategories;

class BvhController extends Controller {

    public function actionView($id) {

//        $cache = $cache = Yii::$app->getCache();

        $BvhFile = BvhFiles::getDb()->cache(function ($db) {
            return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
        });

但它不起作用。它失败了

  

PHP注意 - yii \ base \ ErrorException

     

未定义的变量:id

 return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();

我应该如何将$ id变量传递给此代码?

谢谢!

2 个答案:

答案 0 :(得分:2)

你应该试试这个:

$BvhFile = BvhFiles::getDb()->cache(function ($db) use ($id) {
    return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
});

详细了解anonymous function and how to use variables from the parent scope

你应该使用它(read more):

return BvhFiles::find()->where(['OR', ['id' => $id], ['YoutubeId' => $id]])->one();

答案 1 :(得分:1)

这是一个与Yii无关的问题,而是与php本身有关。如果要将变量传递给匿名函数,则需要使用use关键字:

$BvhFile = BvhFiles::getDb()->cache(function ($db) use($id) {
    return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
});