通過引用傳遞:PHP:按引用傳遞
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
輸出爲:
-test
-
但是當我做
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
輸出爲:
-test-
爲什麼我不能通過引用來傳遞?
通過引用傳遞:PHP:按引用傳遞
<?php
$str = "test \n";
trim(&$str);
echo "-" . "$str" . "-";
?>
輸出爲:
-test
-
但是當我做
<?php
$str = "test \n";
$str = trim($str);
echo "-" . "$str" . "-";
?>
輸出爲:
-test-
爲什麼我不能通過引用來傳遞?
因爲trim()
不期望的參考,因此不修改傳遞給它的字符串。經過參考纔有意義,如果該函數需要一個 - 然後你沒有的不傳遞,因爲如果函數定義包含引用參數或沒有什麼重要的參考選擇。
你正在嘗試做的,在調用的時候傳址引用deprecated在PHP中,因爲很長一段時間。除此之外,即使它不會被棄用,將只對實際修改參數的函數工作。
注:函數調用中沒有參考符號 - 僅在函數定義上。單獨的函數定義足以通過引用正確傳遞參數。從PHP 5.3.0開始,當您在
foo(&$a);
中使用&
時,您將收到一條警告,指出「呼叫時傳遞參考」已棄用。
讓檢查什麼PHP Reference說一下:
注:有一個函數調用無符號 - 只有函數定義。單獨的函數定義足以通過引用正確傳遞參數。由於PHP 5.3.0中,你會得到一個警告說「通話時傳遞的引用」已經過時......
看那trim
簽名:
string trim (string $str [, string $charlist ])
沒有什麼約$str
將通過引用傳遞。所以它不會。函數trim
將僅使用您的輸入來生成輸出,但不會修改它 - 它不能反正,因爲$str
未通過引用傳遞。
爲什麼他們不贊成使用PHP? – dukevin 2012-04-22 10:34:10
因爲它根本沒有意義。爲了使CTPBR有用,調用者需要知道函數的實現細節。取決於函數的寫法,甚至可能會有意想不到的副作用。 – ThiefMaster 2012-04-22 10:35:43