程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 概論為什麼PHP全局變量不能生效

概論為什麼PHP全局變量不能生效

編輯:關於PHP編程

對於一個新手在實際操作

但在實際操作時,會接連碰到幾次全局變量無效的郁悶的事,下面就重點看一下PHP全局變量不能生效的原因及解決辦法。

1.PHP全局變量不能生效錯誤重現

問題出現在用我的簡易框架時,在view中使用原來第三方定義好的函數時(此函數比較獨立),下面模擬一下:

t1.php

  1. < ?  
  2. run(); //執行  
  3. function run(){  
  4. include 'func.php';  
  5. showGlobal();  
  6. }  
  7. ?> 

func.php1

  1. < ?  
  2. $vars = 'I am global!';  
  3. function showGlobal(){  
  4. global $vars;  
  5. print('我使用全局變量:'.$vars);  
  6. }  
  7. ?> 

很簡單的兩個文件(第一次發現問題時,遠比這復雜,在一層層排錯後,得出最少化的問題重現環境),func.php是定義好的第三方函數,該函數使用了一些全局變量,如果這時把這兩個文件放在一起,執行一下t1.php,會發現showGlobal裡的$vars是顯示不出來的,global失效了?

2.PHP全局變量不能生效錯誤原因

搜索後發現,php.net上很早就有人提出過,也有人給出了解釋:
原來,在t1.php的run函數中include func.php時,func.php中的變量$vars的作用域只是在run之內,而在showGlobal中使用global聲明的$vars是要求屬於t1.php的不是run函數的,所以為空)

3.PHP全局變量不能生效解決方法

知道原因後,解決就很簡單,可以把include 從run中移出來,這樣,func.php中的$vars就屬於t1.php了;也可以在run裡用global聲明一下$vars,這樣也可以把原來屬於run的$vars聲明為全局(屬於t1.php);

雖然問題可以簡決,但用起來還是很不爽, 因為在我的phpec框架中,include的情況比較普遍,不可能把view中按需include的移到外層去,使用global的話,我在使用第三方函數時,又不會也不想去了解它用了什麼全局變量,而且,層次結構一多,就….

PHP全局變量不能生效的原因總結:

1)盡量減少多級和函數中include文件.

2)盡量不用全局變量


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved