首页 > 解决方案 > 在 Laravel 5 中,这是做什么的: $this->{$var}

问题描述

我在 api 端点中有以下代码,它检查要删除的模型上没有关系(并返回 true 以显示它正在使用中):

控制器

public function destroy(Group $group)
    {
        if ($group->inUse()) {
            return response(
                ['message' => 'This group cannot be deleted because it has either associated 
                catalogue items, users or organisations'],
                409
            );
        }

        $group->delete();
    }

模型

public function inUse()
{
    $models = [
        'categories',
        'items',
        'organisations',
    ];

    foreach ($models as $model) {
        if (count($this->{$model}) > 0 ){
            return true;
        }
    }

    return false;
}

我不完全理解的那一行是我们检查每个模型的关系数量:count($this->{$model})

我在 php.net 上读到$this->{$var} 是一个变量变量,但在这里情况并非如此,循环的第一次运行将返回一个未定义的变量 $categories:

if($this->$categories) {
    //
}

这是 laravel 的功能还是特殊的语法?我进行了快速搜索,但什么都没有出现。

提前致谢。

标签: phplaravel

解决方案


它的 php 语法,用于动态调用对象属性的大括号,在您的情况下,这将被翻译为:

if (count($this->categories) > 0 ), if (count($this->items) > 0 )...


推荐阅读