框架中的PHP对象引用

时间:2010-04-18 00:28:41

标签: php performance oop frameworks object-reference

在我深入讨论这个问题之前,我想一个简单的问题;有没有一种方法可以确定变量是否是对另一个变量/对象的引用? (只是想检查我是否正确传递引用,而不是制作我的对象的重复版本)。例如

$foo = 'Hello World';
$bar = &$foo;
echo (is_reference($bar) ? 'Is reference' : 'Is orginal';

我已经使用PHP5几年了(仅供个人使用)而且我会说我在面向对象的实现主题上适度逆转。然而,模型视图控制器框架的概念对我来说是相当新的。

我查看了一些教程并查看了一些开源框架(主要是CodeIgnitor),以便更好地理解所有内容是如何组合在一起的。我开始意识到使用这种结构的真正好处。

我习惯于用以下技术实现对象引用。

class Foo{
    public $var = 'Hello World!';
}
class Bar{
    public function __construct(){
        global $Foo;
        echo $Foo->var;
    }
}
$Foo = new Foo;
$Bar = new Bar;

我很惊讶地发现CodeIgnitor和Yii传递了对象的参考资料,可以通过以下方法访问:

$this->load->view('argument')

我能看到的直接优势是代码少得多,用户友好。但我确实想知道它是否更有效,因为这些框架可能是优化的?或者只是为了使代码更加用户友好?还是其他一些优势?这是一篇有趣的文章Do not use PHP references

我问的原因是我试图将一个框架放在一起用于个人项目和学习曲线。

更新

$Baz = $Foo;
$Baz->var = 'Goodbye World!';
echo $Foo->var;

/* Ouput */
Goodbye World!

我有点尴尬地说我不希望这个给出这个输出。当然确实让事情变得容易了。

1 个答案:

答案 0 :(得分:1)

& operator是PHP4通过引用传递对象的方式,PHP5默认执行此操作。仍然使用此运算符的代码是向后兼容的。

你仍然可以使用&在PHP5中通过引用传递其他数据类型,但对它的需求是非常罕见的,我建议避免它。