提问人:Jarrett 提问时间:7/26/2014 更新时间:7/26/2014 访问量:48
使用 $$ 的 CodeIgniter 访问模型失败
CodeIgniter access model with $$ fails
问:
我在 CodeIgniter 中有一个叫做 CodeIgniter 的模型。我想“动态”加载和使用这个模型。也就是说,我不想直接按名称调用它(我正在尝试概括一些代码以使用我告诉它的任何模型)。Treatment
所以,我这样做:
$namespace = 'blah';
$modelName = 'Treatment';
...
$this->load->model($namespace . '/' . $modelName);
$this->model = $this->$$modelName;
但是,我在访问变量时遇到错误,说变量“Treatment”未定义:$this->$$modelName
Undefined variable: Treatment ... Fatal error: Cannot access empty
property in /mydir/application/controllers/rest/base_rest.php on line
202.
其中 line 是我使用变量的线。202
$this->$$modelName
现在,如果我将行更改为:202
$this->model = $this->Treatment;
它工作正常。
有谁知道为什么我似乎不能在这里使用 PHP 语法?$$
答:
1赞
Marc B
7/26/2014
#1
你不能,因为它不是受支持的语法。尝试
$this->{$modelName}
相反。例如:
php > class foo { public $bar = 42; }
php > $x = new foo();
php > $y = 'bar';
php > echo $x->$$y;
PHP Notice: Undefined variable: bar in php shell code on line 1
PHP Fatal error: Cannot access empty property in php shell code on line 1
php > echo $x->{$y};
42php >
评论
0赞
Jarrett
7/26/2014
工作完美!谢谢@Marc!一旦 SO 允许我(~10 分钟后),我会接受您的回答。
评论
$this->Treatment
$this->$modelName
$this->$$modelName
$$
是 中的 Variable Variable 语法。我不知道在以我在这里的方式引用变量变量时,该语法有不同的风格(尽管现在查看它,文档在示例 1 :S 中有这个)。PHP
$Treatment