2009-12-07 17 views
3

我可能應該有,但我從來沒有見過。在查看Smarty插件的文檔時可以看到它。PHP中的符號我從來沒有遇到過

$smarty =& new Smarty; 

= &特別注意。如果您在Google中輸入該內容,則會像其他搜索引擎一樣被忽略。這用於什麼?

同去的這個函數簽名:

function connect(&$smarty, $reset = false) 

爲什麼&符號?

+0

請注意,在第一個示例中,您只需要在PHP4中使用它。 – nickf 2009-12-07 11:24:49

+3

單詞與Google一起工作,例如「等於& php」。 – GZipp 2009-12-07 15:02:52

回答

0

&符將分配一個對變量的引用,而不是對象的值。

1

&是PHP的參考運算符。它用於返回對象的引用。在這種情況下,「新Smarty」。

4

&passes an argument by reference。以這種方式,connect()可以操作$smarty對象,以便調用函數可以檢索修改的對象。

類似地,=&通過引用設置變量。

3

正如蒂姆所說,它是一個變量的參考。但是,如果您使用的是最新版本的PHP,那麼無論如何所有類對象都通過引用傳遞。如果您在傳遞數組或其他內置類型時仍然需要這個。

2

第一個示例是返回引用,第二個是傳遞引用。

你可以閱讀所有關於它在PHP manual

16

其實,這段代碼被寫入與PHP 4兼容的符號是PHP 5中無用的(如Tim說 - 因爲PHP 5,所有的對象都是通過參考傳遞)。

在PHP 4中,所有變量都是按值傳遞的。 如果你想通過引用傳遞它,你必須聲明引用賦值:

$ref_on_my_object =& new MyObject(); 

此代碼仍與PHP 5的默認配置所接受,但最好這樣寫:

$ref_on_my_object = new MyObject(); // Reference assignment is implicit 

對於你的第二個問題,問題幾乎是一樣的...... 因爲PHP允許你聲明函數參數(響應類型),並且你不能爲返回值。 被接受的,但「不太好」的做法是避免該函數的聲明中引用聲明:

function foo($my_arg) {  
    // Some processing 
} 

並與參考調用...

$my_var; 
$result = foo(&$my_var); 
// $my_var may have changed because you sent the reference to the function 

理想的聲明將更像:

function foo(& $my_input_arg) {  
    // Some processing 
} 

然後,呼叫失去與號:

$my_var; 
$result = foo($my_var); 
// $my_var may have changed because you sent the reference to the function 
+1

顯然是最好的答案。 – MiseryIndex 2009-12-07 13:29:38

0

一個與號運營商的主要用途之一是由通過內存地址。這通常是您想要更改變量但不返回時所做的事情。

 
function test_array(&$arr) 
{ 
    $varr[] = "test2"; 
} 
$var = array('test'); 
test_array($var); 

print_r($var); 

this should output 

array(test , test2); 

這樣做的目的通常是當你需要實際的複製[存儲器地址]你正在使用的傳遞到另一個函數/對象。它通常用於緩解內存不足和加速性能,這是C/C++和其他一些低級語言的一個特性。

+1

其實,我不認爲你傳遞的內存地址... 我認爲,你正在處理一個參考Zval它擁有的數據... – Arno 2009-12-07 15:15:47

+0

我明白。我只是試圖暗示該語言將使用與C/C++內部相似的參考。並不是說它實際上向用戶公開內存地址,因爲這是用戶不應該知道的受保護信息。 – krob 2009-12-08 09:01:31

相關問題