php中函式引數傳遞

2021-07-31 08:58:40 字數 1239 閱讀 6184

php中函式引數傳遞有形參傳遞(借用c語言等程式語言的說法)。

即就是把變數的值賦值給函式的引數,對函式引數所做的一切操作都與原始變數無關。

//php

function

testx

( $b )

$a = 5 ;

$c = testx($a);

print_r($a);//5

print_r($c);//3

而址傳遞(引用傳遞)則是把變數的位址給函式的引數,函式中對引數做的一切操作都等同於給變數做操作。

//php

function

tests

( &$b )

$a = 5 ;

$c = testx($a);

print_r($a);//3

print_r($c);//3

在php中,函式引數和變數一樣都會在記憶體中開闢空間,但是正常的引數傳遞是把值賦給引數,而引用傳遞則不是,它會把變數的位址放到引數所在的空間。

尤為注意的是php5之後對引用傳遞的寫法做了改變。如上面的**所示,將php的寫法改變為與其他程式語言的寫法一樣。定義時需要使用&,呼叫時不需要使用&.與以前的寫法有很大的不同。

//php以前的寫法

function &tests

( &$b )

$c = &tests($a);

優點:

這種寫法的改變,個人認為是為了減少php語言的獨特性,向其他的程式語言的書寫方式靠攏。某種意義而言它使得熟悉其他程式語言的程式設計師能更快的掌握php。從**閱讀和邏輯理解的角度考慮,它完全忽視了函式內部對變數做的一切操作。對於**抽象更有意義。

缺點:

我想對於開發一線的程式設計師來說,這是個令人抓狂的改變。尤其是做二次開發的人員來說。二次開發的人員需要在前人的基礎上進行開發。看到函式時習慣了&來分辨引用傳值函式,沒有這種寫法,所有函式都一樣,如果涉及引用傳值函式的呼叫,那麼程式設計師需要去函式內部檢視**細節。特別是程式出現錯誤時。需要去詳細的了解引用傳值函式對變數所做的一切改變。而取消了&去呼叫引用函式,則代表需要去檢視程式呼叫的所有函式(因為你不知道哪乙個函式是引用函式),工作量可想而知!

還有就是全域性變數(global)。這是一種直接和快捷的引數定義方式。將函式要用到的引數設為全域性變數。這樣在函式內部的操作直接使用變數本身。

在簡短的程式中使用是沒有問題的,但是呼叫外部檔案的時候這並不是理想的引數定義方式!

PHP函式傳遞引數方式

函式構成 function name 引數 函式命令 可能有return 呼叫函式的時候 a name b 寫函式時候的引數名,和實際呼叫時的引數名,沒有必然聯絡。函式呼叫時候,如果是普通的變數引數 字元 整形 浮點 陣列 是直接去的這個變數引數的值,傳遞進函式中進行運算,不會對函式外的引數進行修改...

php函式引數傳遞的思考

按我以前一直的想法,php中除了簡單變數,其他應該是都是按引用傳遞函式引數的 於是做了乙個實驗,有點意外 a array s 1 function s array s a echo a s 結果是1 這個例子至少說明了在php中陣列是按值傳遞的 class obj function s obj te...

ode中函式引數傳遞

在用odesolver ode45,ode15s,來解微分方程的時候,最基本的用法是 t,y odesolver odefun,tspan,y0 這裡的odefun是待求的微分方程。那麼odefun中一般會含有多個系統引數,通常要通過改變引數來觀察系統動態的變化。那麼如何在呼叫odesolver的時...