2010-04-18 72 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中通過引用傳遞其他數據類型,但是對它的需求非常少見,我建議避免它。