2010-12-15 42 views
1

在PHP中,所有的對象變量實際上是指向對象的指針(不是嗎?),語言處理這種隱含(右?),但我看到很多的PHP代碼中指定的參數引用像這樣的:使用&獲取PHP中的對象引用是多餘的?

function someMethod(SomeClass& $obj) 
{ 
//... 
} 

我也看到了這樣的事情:

function add() 
{ 
$object = new SomeClass; 
self::$objects[] =& $object; 
} 

糾正我,如果我錯了,但也不會在這裏任何區別:

self::$objects[] =& new SomeClass 
self::$objects[] = new SomeClass 

我說得對??????

另一件事我測試:

class SomeClass{} 
$obj =& new SomeClass; // is in fact deprecated, doesn't work 

$obj = new SomeClass; 
$obj2 =& $obj; // works, but should also be deprecated!! No? 
+0

爲什麼會'=&'對肛運行時,它應該不會影響你的代碼這個變量是否被棄用? – BoltClock 2010-12-15 04:13:25

+0

@BoltClock:在變量已經是指向對象的指針的情況下。 – fabio 2010-12-15 04:15:10

+0

@ user532722:如果它不是對象,而是'value type'變量呢? – zerkms 2010-12-15 04:16:38

回答

2

在PHP5,是的,這是多餘的,毫無意義的。

+0

我會留下你的回答 – fabio 2010-12-15 04:28:29

+0

不,它不是。 '&'創建一個變量引用,它與對象引用完全不同。看到這個答案的差異的詳細分類:http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129 – ircmaxell 2010-12-15 04:43:06

+0

@ircmaxell:在案件OP給我們作爲樣本 - 沒有區別。 – zerkms 2010-12-15 04:44:40

0

本頁面可以對你有所幫助: http://www.php.net/manual/en/language.operators.assignment.php

new自動返回引用,這樣你就不會用新申報對象再使用= &

+0

'&='='= &' ; - !)'='(這是什麼OP詢問)實際上是2個運營商'='和'&' – zerkms 2010-12-15 04:13:13

+0

你是對的,我的錯誤,但問題仍然是有效的。固定。 – zsalzbank 2010-12-15 04:14:59

+1

@zerkms:我認爲這是兩個運營商太('$ somevar =到someothervar' $的引用),但根據Artefacto它實際上是一個單一的運營商。看到他對[這個問題]的評論(http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php)。 – BoltClock 2010-12-15 04:28:57

1

與正在據我所知棄用引用的唯一的事情就是調用時傳址引用(例如somefunction(&$var);

你的代碼樣本可能有PHP 4的兼容性&象徵。它沒有按」噸多大的差別是否使用&或不與對象引用在PHP 5工作是理所當然的是有輕微(通過引用之間通過值PHP 5,並使用&傳遞通過引用的對象),但在大多數情況下PHP 5

相關問題