0

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

$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')

我可以看到的直接优势是代码更少,用户更友好。但我确实想知道它是否更有效,因为这些框架可能已经过优化?或者只是为了让代码更加用户友好?还是其他什么优势?这是一篇有趣的文章不要使用 PHP 引用

我问的原因是我试图为个人项目和学习曲线建立一个框架。

更新

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

/* Ouput */
Goodbye World!

我有点尴尬地说我没想到会给出这个输出。现在确实让事情变得容易多了。

4

1 回答 1

1

& 运算符是 PHP4 通过引用传递对象的方式,PHP5 默认这样做。仍使用此运算符的代码将向后兼容。

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

于 2010-04-18T01:00:01.323 回答