2019独角兽企业重金招聘Python工程师标准>>>

开发一个PHP程序,不可避免的要使用到全局数据.

全局变量便是其中之一,当然这个观点颇具争议,有许多人还是建议禁用全局变量,使用不当对造成程序的可读性很差!结构混乱,调试更是一头雾水,但是不可否认他的便捷,这便是php为什么会用全局变量global原因吧!…

今天就遇到了php 全局变量不起作用的问题.

先上一段简单的代码:

<?phpinclude 'B.php'; $a =0;Set_Global($a);echo $a;?> //B.php 文件<?phpfunction Set_Global(&$var){$var=1;}  ?>

上面的代码中输出是0,那是因为函数体Test内$a变量被缺省设置为局部变量,$a的作用域就是在Test内.修改代码如下

<?php$a = 0 ;function Test(){global $a;//申明函数体Test内使用的$a变量为global全局变量$a =1;}Test();echo $a;?>

申明函数体Test内使用的$a变量为global全局变量后,使得$a的作用全局,所以输出为1.
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:

//A.php 文件<?phpfunction Test_Global(){  include 'B.php';  Test();  }  $a = 0 ;Test_Global();echo $a;?> //B.php 文件<?phpfunction Test(){global $a;//申明函数体Sum内使用的$a变量为global全局变量$a =1;}?>

为什么输出的却是0?!!

在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….

解决方案:

1. 冲出局部函数

//A.php 文件<?phpfunction Test_Global(){  Test();  }  include 'B.php';   //将include 从局部Test_Global函数中移出$a = 0 ;Test_Global();echo $a;?> //B.php 文件<?phpfunction Test(){global $a;$a =1;}?>

2.优秀的访问器

<?phpinclude 'B.php'; $a =0;Set_Global($a);echo $a;?> //B.php 文件<?phpfunction Set_Global(&$var){$var=1;}?>

转载于:https://my.oschina.net/Xerxeschn/blog/83490

PHP 全局变量global详解相关推荐

  1. python函数 global_Python global全局变量函数详解

    global语句的作用 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量.此时用global语句就可以变成这个任 ...

  2. PHP全局变量global与$GLOBAL详解

    总结: A:1全局变量相当于有3个变量,函数外部的变量,函数内部的变量,及$GLOBAL的超全局变量. ----$GLOBAL是全局唯一的,而$var在为全局变量的别名. B:无论函数内部外部,只要曾 ...

  3. python nonlocal 与 global 详解

    变量作用域问题 case1 通常在函数之外无法访问到函数内的变量 def f1():a=1 print(a) NameError: name 'a' is not defined case2 但函数内 ...

  4. Python中局部变量和全局变量的详解

    1.局部变量 定义: 局部变量,就是在函数内部定义的变量 约束: 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的 实例: def test1():a = 120print( ...

  5. 【python】global详解

    在最外部声明函数,被视为全局变量. a = 1def func1():print(a) # 可引用全局变量adef func2():print(a) # 可引用全局变量afunc2() func1() ...

  6. matlab 局部变量和全局变量,C++局部变量和全局变量(详解版)

    局部变量定义在一个函数内部,在函数之外是不可访问的.全局变量定义在所有函数之外,并且在其作用域内的所有函数都可以访问.下面做详细讲解. 局部变量 函数中定义的变量是该函数的局部变量.它们在其他函数的语 ...

  7. python全局变量操作详解_Python全局变量是什么?Python全局变量怎么使用?

    Python全局变量是什么?Python全局变量怎么使用?通常可以将任何编程语言中的变量定义为用于以特定名称存储值的元素,并且该变量在存储器中用作存储单元中的标识对象.它可以有两种类型,全局变量和局部 ...

  8. java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别

    前言 Javascript中的变量定义方式有以下三种方式: 1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...

  9. PHP超全局变量$_ENV详解,及$_ENV为空的可能原因

    PHP中的$_ENV存储了一些系统的环境变量,因为牵扯到实际的操作系统,所以不可能给出$_ENV的完整列表. $_ENV为空的可能原因:  你的php.ini的variables_order值为&qu ...

最新文章

  1. 电商直播平台如何借助容器与中间件实现研发效率提升100%?
  2. Android 搜索框 search dialog 和 search widget
  3. netcdf4excel插件安装完出现问题
  4. javascript中的this使用场景
  5. php多态性和继承是什么意思,封装 继承 多态的区别
  6. Rafy 框架 - 幽灵插件(假删除)
  7. 通过预训练提升语言理解
  8. 【算法】BloomFilter 如何判断一个元素在亿级数据中是否存在?
  9. Ubuntu系统下允许Apache的mod_rewrite功能
  10. su 与 su - 区别
  11. codevs——2822 爱在心中
  12. delphi 2010 mysql_delphi2010读取MySQL数据库TEXT类型乱码的解决方案
  13. vue中打印表格功能(重点是表格制作)
  14. 移动技术--从网页游戏谈起 1
  15. 演绎与归纳,双管齐下
  16. 2020-11-16学习总结: sass配置
  17. python 因子分析 权重计算方法_如何使用Python(scikit-learn)计算FactorAnalysis得分?
  18. 无心剑英译许巍《温暖》
  19. 网站服务器无法打开ie,internet explorer无法打开站点怎么办
  20. DELETE 语句与 REFERENCE 约束“FK_T_score_T_student_number“冲突。

热门文章

  1. vs2012中VC连接mysql
  2. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))
  3. 小众的分布式版本管理工具Code Co-op
  4. Qt中使用OpenGL进行绘图
  5. 获取treeview中当前鼠标所指的节点treenode 。
  6. ios14.3开发之使用纯代码创建UITabbarController
  7. Java之文件流操作的文件读写
  8. ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!
  9. mysql --explicit_【MySQL】 explicit_defaults_for_timestamp 参数解析
  10. koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)