使用 $$ 的 CodeIgniter 访问模型失败

CodeIgniter access model with $$ fails

提问人:Jarrett 提问时间:7/26/2014 更新时间:7/26/2014 访问量:48

问:

我在 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 语法?$$

php codeigniter 变量

评论

0赞 deceze 7/26/2014
定期:。变量:???:$this->Treatment$this->$modelName$this->$$modelName
1赞 Jarrett 7/26/2014
$$中的 Variable Variable 语法。我不知道在以我在这里的方式引用变量变量时,该语法有不同的风格(尽管现在查看它,文档在示例 1 :S 中有这个)。PHP
0赞 deceze 7/26/2014
嗯,是的,它正在寻找调用的变量变量,然后将其值用作对象属性名称。$Treatment

答:

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 分钟后),我会接受您的回答。