php global变量无效问题详解

global定义的变量为全局变量,打个比方说吧,如果函数中的变量与函数外部同名变量在php中不是一个变量,如果我们利用global在函数中定义了这个与外部相同的变量名,那么他们就是一个变量了,下面我们一起拿几个实例说明一下。

对于PHP初学者而言,在使用global关键字时,可能会发现,在函数内global一个函数外的变量,在某些情况下却无法正确输出该变量(即global变量无效)。下面我们来看一个简单而常见的例子。

在这里,我们有a.php和b.php两个页面。

b.php页面代码如下:

  1.  <?php 
  2.     $site_name = 'CodePlayer'
  3.     function sayHi(){ 
  4.         global $site_name
  5.         echo "Hello! Welcome to $site_name !"
  6.     } 
  7. ?> 

a.php页面代码如下:

  1. <?php 
  2.     function include_view_page(){ 
  3.         include 'b.php'
  4.         sayHi();                     
  5.     } 
  6.     include_view_page(); 
  7. ?> 

上面的例子非常简单,我们希望当我们访问a.php页面,能够正确显示出欢迎语句。不过,遗憾的是,当我们使用浏览器访问a.php页面却发现输出结果如下:

Hello! Welcome to !

也就是说,我们在函数include_view_page()中调用sayHi()函数时,b.php页面sayHi()函数中global的$site_name却没有被正确识别、生效。这究竟是怎么一回事呢?

实际上,当我们在函数include_view_page()中include b.php页面时,b.php页面的变量$site_name就相当于存放在include_view_page()函数内的作用域中。众所周知,在函数内global一个变量实际上是在函数内建立一个对页面全局变量的引用。而在我们的例子中,这个$site_name变量对于a.php而言,它只是include_view_page()函数内的局部变量,因此无法global该变量,我们进行相关调用时自然无法获取到正确的变量和变量值。

在php中,我们尤其需要注意类似上述在函数内include某个页面,导致该页面中变量的作用域发生改变的问题。为了避免这种情况,我们应该尽量减少多层次的include调用,也尽量不要在函数内使用include。此外,我们还可以在b.php的页面中将$site_name进行全局变量形式的声明,代码如下:

  1. <?php 
  2. global $site_name
  3. $site_name = 'CodePlayer'
  4. function sayHi(){ 
  5.     global $site_name
  6.     echo "Hello! Welcome to $site_name !"
  7. ?> 

例、函数内引用全局变量,先看下面的代码:

  1. <?php  
  2. $var1 = "#####";  
  3. $var2 = "&&&&&"
  4. function global_references($use_globals)  
  5. {  
  6. global $var1$var2;  
  7. if (!$use_globals) {  
  8. $var2 =&$var1//1 
  9. else {  
  10. $GLOBALS["var2"] =&$var1//2 
  11. }  
  12. global_references(false);  
  13. echo "var2 is set to '$var2'<br/>";  
  14. global_references(true);  
  15. echo "var2 is set to '$var2'<br/>";  
  16. ?> 

输出的结果如下:

var2 is set to '&&&&&' 

var2 is set to '#####'

可见,上面的代码中:$var2 =&$var1; //1 只对函数内部可见。 

而 $GLOBALS["var2"] =&$var1; //2 在全局范围内可见.

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » php global变量无效问题详解

40 评论

  1. brand tadalafil 10mg price cialis order clomipramine 25mg generic

  2. oral cozaar 25mg buy topiramate order topiramate 100mg generic

  3. buy generic prednisone 20mg prazosin 1mg brand mebendazole for sale online

  4. buy spiriva without prescription hytrin 1mg oral hytrin order online

  5. online casino roulette casinos play blackjack online for real money

  6. cheap nifedipine 30mg allegra cheap allegra 180mg usa

  7. Hello! I could have sworn I’ve been to this blog before but after browsing through some of the post I realized it’s new to me. Metropol Halı Karaca Halı Öztekin ve Selçuklu Halı Cami Halısı ve Cami Halıları Türkiye’nin En Büyük Cami Halısı Fabrikasıyız…

  8. Thank you great posting about essential oil. Hello Administ . Metropol Halı Karaca Halı Öztekin ve Selçuklu Halı Cami Halısı ve Cami Halıları Türkiye’nin En Büyük Cami Halısı Fabrikasıyız…

  9. buy requip 1mg pill trandate tablet buy labetalol 100 mg for sale

  10. Thank you for great article. Hello Administ . Onwin , Onwin Giriş , Onwin Güncel Giriş , Onwin Yeni Adres , onwin

  11. buy tadalafil 40mg online cheap buy cialis fda approved over the counter ed pills

  12. Hi, just required you to know I he added your site to my Google bookmarks due to your layout. But seriously, I believe your internet site has 1 in the freshest theme I??ve came across.

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡