首頁 >後端開發 >PHP問題 >php函數如何傳遞參數

php函數如何傳遞參數

silencement
silencement原創
2019-09-26 11:51:472532瀏覽

php函數如何傳遞參數

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn