0
在C++中,當您希望函數能夠從對象讀取但不能修改它時,您可以將const
引用傳遞給該函數。什麼是在PHP中這樣做的等效方式?通過const引用傳遞一個對象?
我知道在PHP5對象由默認的引用傳遞,但可讀性,我想我會繼續在變量名前使用的符號,就像這樣:
function foo(&$obj)
{
}
在C++中,當您希望函數能夠從對象讀取但不能修改它時,您可以將const
引用傳遞給該函數。什麼是在PHP中這樣做的等效方式?通過const引用傳遞一個對象?
我知道在PHP5對象由默認的引用傳遞,但可讀性,我想我會繼續在變量名前使用的符號,就像這樣:
function foo(&$obj)
{
}
如果你想傳遞一個對象但不能通過參考,你可以預先對象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
是它可以假設它是通過引用傳遞的對象。
這不會降低性能嗎? (我有幾十個對象,每個對象都需要獨立傳遞給大約六種不同的函數) – Nate 2012-07-06 19:01:14
@Nate PHP使用[copy-on-write](http://en.wikipedia.org/wiki/Copy-on-寫)所以AFAIK它不會浪費變量,除非你修改對象。 – 2012-07-06 19:02:41
因此,如果事先傳遞帶有'clone'關鍵字的對象,它是否會複製對象而不調用對象的構造函數?我必須寫一個'__clone()方法嗎? – Nate 2012-07-06 19:08:44