2012-07-06 108 views
0

在C++中,當您希望函數能夠從對象讀取但不能修改它時,您可以將const引用傳遞給該函數。什麼是在PHP中這樣做的等效方式?通過const引用傳遞一個對象?

我知道在PHP5對象由默認的引用傳遞,但可讀性,我想我會繼續在變量名前使用的符號,就像這樣:

function foo(&$obj) 
{ 

} 

回答

3

如果你想傳遞一個對象但不能通過參考,你可以預先對象clone

<?php 
function changeObject($obj) { 
    $obj->name = 'Mike'; 
} 

$obj = new StdClass; 
$obj->name = 'John'; 

changeObject(clone $obj); 
echo $obj->name; // John 

changeObject($obj); 
echo $obj->name; // Mike 

我知道在PHP5對象由默認的引用傳遞,但可讀性,我想我會繼續變量名

這是你的電話之前,使用的符號,但我發現,只會讓它看起來更像C++。 Alternativly,你也可以說一個對象是由在函數定義使用類型提示中傳遞:

function foo(StdClass $obj) 
{ 

} 

一旦很明顯,$obj是它可以假設它是通過引用傳遞的對象。

+0

這不會降低性能嗎? (我有幾十個對象,每個對象都需要獨立傳遞給大約六種不同的函數) – Nate 2012-07-06 19:01:14

+1

@Nate PHP使用[copy-on-write](http://en.wikipedia.org/wiki/Copy-on-寫)所以AFAIK它不會浪費變量,除非你修改對象。 – 2012-07-06 19:02:41

+0

因此,如果事先傳遞帶有'clone'關鍵字的對象,它是否會複製對象而不調用對象的構造函數?我必須寫一個'__clone()方法嗎? – Nate 2012-07-06 19:08:44

相關問題