2010-04-18 71 views
0

在我深入讨论解构部分之前,有没有一种方法来确定变量是否是对另一个变量/对象的引用? (只是想检查我正确传递引用,而不是使我的对象的重复版本)。例如框架中的PHP对象引用

$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的传递对象的referencs,并且可以通过以下方法获得:

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

的直接优点我可以看到的是少了很多的代码和多个用户友善。但是我想知道它是否更高效,因为这些框架大概是优化的?或者只是为了使代码更加用户友好?或者其他一些优势?这是一篇有趣的文章Do not use PHP references

我问的原因是我试图把个人项目和学习曲线放在一起。

UPDATE

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

/* Ouput */ 
Goodbye World! 

我有点不好意思地说,我没想到这给这个输出。现在肯定会让事情变得更容易。

回答

1

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

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