2009-12-15 109 views
0

在分鐘php6 developer meeting中,我遇到了一個觀點,它表示在PHP6中不再存在通過引用傳遞呼叫的時間。例如,以下都爲PHP6是不正確的:PHP:通過引用傳遞變量的替代方法?

<?php 
$foo =& new StdClass(); 
?> 

<?php 
function &foo() 
{ 
    return new StdClass(); 
} 

$f = foo(); 
?> 

如果我們不能在PHP6是這樣的:

$foo =& new StdClass(); 

什麼是替代的是,有沒有什麼辦法來模仿?

編輯:

答有關PHP6變量,我們可以做什麼,對於變量,例如:

$this->data =& $_SESSION; 

回答

4

你不參數作爲參考,但你仍然可以/必須聲明您的功能/方法爲通過參考接收參數。

也就是說,你不這樣做(通過引用傳遞參數)

my_function(& $my_var); 

function my_function($a) { 
    // ... 
} 

但你可以做到這一點(聲明函數作爲參照接收參數)

my_function($my_var); 

function my_function(& $a) { 
    // ... 
} 


And ...您給出的代碼示例與呼叫時間傳遞無關,但涉及歸還

對於第二件事,如果你只是刪除&?在函數內部創建的對象的實例將被返回,您仍然可以使用它,不是嗎?

+0

謝謝您的回答,PLZ看到我的編輯下面的問題,謝謝 – Sarfraz 2009-12-15 07:22:27

+0

也是我說的不是功能,我說的呼叫時間傳遞通過引用。 – Sarfraz 2009-12-15 07:27:21

+1

通話時傳遞的引用*爲*做功能。 '創建my_function(&$a);'是'傳遞$了''要通過參考在呼叫時my_function',而不是在聲明時 – DMI 2009-12-15 07:32:53

4

對象總是通過引用自PHP5通過,所以這樣的:

$foo =& new StdClass(); 

相同:

$foo = new StdClass(); 

+0

感謝您的回答,請參閱我的編輯問題,謝謝 – Sarfraz 2009-12-15 07:21:54

1

答關於PHP6的變量,我們可以做什麼變量,例如: $this->data =& $_SESSION;

我看不出有任何理由爲什麼不 - PHP不會被刪除的引用,因爲它們都太有用。沒有其他方法可以創建對變量的引用。

呼叫時間通過引用已被棄用一段時間。這只是意味着代替,這樣做:

function foo($a) { return ++$a; } 
foo(&$my_a); 

你可以這樣做:

function foo(&$a) { return ++$a; } 
foo($my_a); 

這就導致了一個更清潔,更容易理解的編程風格,同時也保證了變量當你期望時總是被引用,而不是當你不期望時引用。

與對象打交道是一個特例 - 它們總是通過引用傳遞,而唯一的方法來模擬傳遞的價值是用clone

$a = new StdClass(); 
$a->foo = 'bar'; 
$b = $a; 
$a->foo = 'qux'; 
// $b->foo is 'qux' too 

$a = new StdClass(); 
$a->foo = 'bar'; 
$b = clone $a; 
$a->foo = 'qux'; 
// $a->foo is 'qux' but $b->foo is 'bar' 

希望幫助!