這個東西很難理解,但很重要,我覺得非常容易出錯。
PHP中的變量按照作用域分為有兩種,一種是global,一種是local。
函數內部聲明的變量就叫local型變量,只能在函數內部被訪問到。一句話,local型變量只能在函數內部定義以及引用。
函數外部聲明的變量叫global型變量,只能在函數的外部訪問到(除了GLOBALS)。這種渣渣也能叫global,真是名不副實啊!我記得以前學習過的語言不是這個樣子的,只要是global,函數外還是函數內都可以訪問到的,但php就是這么難搞。
我們看一個local的例子。
1 <?php 2 3 $name = 'hanmeimei'; 4 function getName(){ 5 echo $name; 6 } 7 8 getName(); 9 10 ?>
運行結果顯示$name這個變量沒有被定義。是因為php解析器沒有在getName函數內部找到$name這個變量的定義。為啥不去外面找去啊,如果沒有特別的聲明,函數內部引用到的變量只會在函數內部去找它的定義。
那怎么才能訪問到外面的name呢?
我們看一個global的例子。
1 <?php 2 $name = "hanmeimei"; 3 function getName(){ 4 global $name; 5 echo $name; 6 } 7 getName(); 8 ?>
這回就沒有錯誤提示了,為什么呢?是因為在getName函數內部有一句global $name,它的意思是告訴PHP解析器$name這個變量的定義你得在函數外面找,然后就找到了$name的值是hanmeimei。變量前面的global使得$name這個global型變量的作用范圍擴大到了getName函數內部。
前面有句話:函數外部聲明的變量叫global型變量,只能在函數的外部訪問到,這是什么意思?
1 <?php 2 $name = 'hanmeimei'; 3 echo $name; 4 ?>
