當前位置:
首頁 > 最新 > 每天學點電腦知識趣味編程系列之變數作用域

每天學點電腦知識趣味編程系列之變數作用域

上一期的趣味編程我們講了變數,這一期,我們要講變數的作用域。什麼是作用域呢?簡單通俗的講,就是變數可以用在什麼地方,它的使用範圍。打個比方,就像我們數學中,第一題的x、y在第二題中就不能用了,第一題的x、y的值只能用在第一題,差不多就是這個意思。那麼下面我們就來看看這個作用域。

官方名詞解釋:變數的作用域是腳本中變數可被引用/使用的部分。

作用域分為:局部作用域(local)全局作用域(global)、靜態作用域(static)、參數作用域(parameter)

一、局部和全局作用域

在所有函數外部定義的變數,擁有全局作用域。除了函數外,全局變數可以被腳本中的任何部分訪問,要在一個函數中訪問一個全局變數,需要使用 global 關鍵字。在 PHP 函數內部聲明的變數是局部變數,僅能在函數內部訪問。簡單通俗的講,全局意思就是到處都可以用,局部意思就是只能在特定的某些地方可以用,下面直接上代碼:

代碼解釋:

1、上圖中的x就是全局變數,擁有全局作用域,意思說在整個文件中的函數以外的地方都可以用,圖中的function myTest() 就是一個函數,function是用來聲明函數用的關鍵字,myTest就是函數名,x在函數裡面不能用,所以在函數裡面使用x會報錯。

2、myTest函數中,聲明了一個變數y,這個變數就是局部變數,擁有局部作用域,它的作用域就是在這個函數範圍內,在函數外,就不能使用了,所以最後一行代碼輸出這個變數y是會報錯的。

下面我們看看程序運行結果:

上圖中,報了4個notice錯誤,也就是警告錯誤,說是在14行中的變數x沒有定義,在25行的變數y沒有定義。因為14行是在函數中使用x,x的作用域是全局的,函數內不能直接調用,所以報錯;25行是在行數外面使用變數 y,y在函數外面沒有定義,只在函數裡面定義了,這是局部變數,所以在函數外面不用使用,所以也報錯了,同時我們可以看到,在行數內使用y,在函數外使用x,都成功輸出了x、y的值。

通過上面的例子,你是否理解了什麼局部和全局作用域了么?

有人會問,那我如果想在函數裡面使用全局變數(全局變數的作用域即為全局作用域)怎麼辦?其實很簡單,只需要使用關鍵字global即可,如圖:

上圖中,我在變數x前面加了關鍵字global,這樣,再在函數裡面輸出變數x,就不會報錯了,也可以正常輸出變數的值5了,運行結果如下:

除了使用global關鍵詞聲明全局變數外,還可以使用超級全局變數$GLOBALS來使用全局變數 x,函數中的變數x可以用 $GLOBALS["x"],也是一樣的效果。

注意:如果在函數內使用關鍵字global或者$GLOBALS,可以通過重新給全局變數賦值來改變全局變數原有的值,單純的使用,不會改變值,如圖:

上圖中,我們在函數中給全局變數x重新賦值100,我們看一下輸出的結果是怎樣的:

從運行結果中可以看出,在函數內,我們給全局變數x賦值成功了,在函數外面輸出x的值也編程100了。

最後,有人會問,函數內部的局部變數如何在函數外使用?這個問題,我可以告訴你,無解,局部變數之所叫局部變數,他的作用域就是局部的。

二、靜態作用域(static)

當一個函數完成時,它的所有變數通常都會被刪除,自動釋放內存。然而,有時候你希望某個局部變數不要被刪除。要做到這一點,請在您第一次聲明變數時使用 static 關鍵字,如圖:

代碼解釋:

1、上圖中變數x使用了關鍵字static,在一次函數運行完結時,不會自動刪除,會保留上一次調用之後的值,在第一次調用之後,我們對變數x進行了自增1,那麼第一次程序運行之後,x會變成1,第二次會變成2,第三次會變成3。

運行結果如下,這裡輸出的是自增之前的值,所以為0,1,2而不是1,2,3。

2、如果不使用static關鍵字,每次調用函數,變數x都會被重新賦值為0,那麼每次運行之後的結果都是1。如圖:

三、參數作用域

參數是通過調用代碼將值傳遞給函數的局部變數(參數也是一種局部變數)。

參數是在參數列表中聲明的,作為函數聲明的一部分

上圖中的x就是參數變數,在聲明函數myTest的時候聲明的,什麼函數時,還可以給參數變數設置默認值,方式為:function myTest($x = 5){},即給參數變數x設置默認值5,調用函數的時候,就可以不傳值了,不傳值就默認為5,傳了就為傳的值。

好了,今天的趣味編程就講解完畢了,你看懂了嗎?看懂了的,在文章下方點個贊!上一期中,我們留了一下問題,變數 x = 5,y = "hello world",問x+y的值是多少?答案是:程序在運行中會報錯,x是整型,y是字元串,整型+字元串沒法加,所以會報錯,如果屏蔽錯誤,得出的結果是:5,變數y自動強轉成0了。是不是很神奇?嘿嘿!給大家推薦一本從0開始學php的書:

下一期,我們將會給大家講解「注釋」,如果你感興趣,請持續關注,更多電腦知識,電腦技術,請關注蟈蟈我的微信公眾號:每天學點電腦知識


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 電腦技術 的精彩文章:

養成這三個習慣,手機永遠不會卡頓

TAG:電腦技術 |