php中函數參數傳遞有形參傳遞(借用c語言等程式語言的說法)。
也就是把變數的值賦值給函數的參數,對函數參數所做的一切操作都與原始變數無關。
//php function testX( $b ) { return $b-=2; } $a = 5 ; $c = testX($a); print_r($a);//5 print_r($c);//3
而址傳遞(引用傳遞)則是把變數的位址給函數的參數,函數中對參數做的一切運算都等同於給變數做運算。
//php function testS( &$b ) { return $b-=2; } $a = 5 ; $c = testX($a); print_r($a);//3 print_r($c);//3
在php中,函數參數和變數一樣都會在記憶體中開闢空間,但是正常的參數傳遞是把值賦給參數,而引用傳遞則不是,它會把變數的位址放
到參數所在的空間。
特別注意的是php5之後對引用傳遞的寫法做了改變。如上面的程式碼所示,將php的寫法改為與其他程式語言的寫法一樣。定義時需要
使用&,呼叫時不需要使用&.與先前的寫法有很大的不同。
//php以前的写法 function &testS( &$b ) { return $b-=2; } $c = &testS($a);
優點:
這種寫法的改變,個人認為是為了減少php語言的獨特性,向其他的程式語言的書寫方式靠攏。某種意義而言它使得熟悉其他程式語言的程式設計師能更快的掌握php。從程式碼閱讀和邏輯理解的角度考慮,它完全忽略了函數內部對變數所做的一切操作。對於程式碼抽象化更有意義。
缺點:
我想對於開發第一線的程式設計師來說,這是個令人抓狂的改變。尤其是做二次開發的人員來說。二次開發的人員需要在前人的基礎上進行開發。看到函數時習慣了&來分辨引用傳值函數,沒有這種寫法,所有函數都一樣,如果涉及引用傳值函數的調用,那麼程式設計師需要去函數內部查看程式碼細節。特別是程式出現錯誤時。需要去詳細的了解引用傳值函數對變數所做的一切改變。而取消了&去呼叫引用函數,則代表需要去查看程式呼叫的所有函數(因為你不知道哪一個函數是引用函數),工作量可想而知!
還有就是全域變數(global)。這是一種直接且快速的參數定義方式。將函數要用到的參數設為全域變數。這樣在函數內部的操作直接使用變數本身。
在簡短的程式中使用是沒有問題的,但是呼叫外部檔案的時候這並不是理想的參數定義方式!
以上是php函數如何傳遞參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!