深入理解PHP中的global


Posted in PHP onAugust 19, 2014

一、实现原理
在PHP的函数中,global语法是比较常见的,大家一定都知道一旦在函数中global了某个外部变量后,这个变量就可以在这个函数中使用了,但是也有不少网友不知道这是一个什么实现原理。现在上一个例子,大家一看就知道了:

$globalStr = '.net';
function globalTest(){
 global $globalStr;
 $globalStr = '3water'.$globalStr;
 unset($globalStr);
}
globalTest();
echo $globalStr; //输入: 3water.com

从这个例子看出global了一个变量就等于传递了一个引用进来。这样理解的话,下面的代码输出结果就不难理解了。

二、php中global的作用 

global $var1,$var2;

就是外部变量的同名引用,变量本身的作用范围仍然在函数体内。改变这些变量的值,外部的同名变量自然也改变。但一旦用了&,那么变量将不再是同名引用。
<?php

$var1 = 1;

$var2 = 2;

function test()

{

    global $var1,$var2; // 作用范围在函数体内

    $var1 = 3;

}

test();

echo $var1;

?>

结果是 3。因为是同名引用。
 
<?

$var1 = 1;

$var2 = 2;

function test()

{

    global $var1,$var2;

    $var1 = &var2;

}

test();

echo $var1

?>

结果是1。因为在函数内的$var1经过赋值后与$var2具有相同的引用了。进一步看下面的代码。
 
<?php  

$var1 = 1;    

$var2 = 2;    

function test_global()    

{    

    global $var1,$var2;    

    $var1=&$var2;    

    $var1=7;    

}

test_global();    

echo $var1;    

echo $var2;

?>

结果是1和7。因为在函数内的$var1与$var2具有相同的引用。因此改变了$var1的值,$var2的值夜作了改变。
PHP 相关文章推荐
利用PHP创建动态图像
Oct 09 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
PHP中uploaded_files函数使用方法详解
Mar 09 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
php代码检查代理ip的有效性
Aug 19 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
PHP Session机制简介及用法
Aug 19 #PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 #PHP
PHP 导出Excel示例分享
Aug 18 #PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 #PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 #PHP
PHP实现取得HTTP请求的原文
Aug 18 #PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 #PHP
You might like
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
javascript基本算法汇总
2016/03/09 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
微信跳一跳小游戏python脚本
2018/01/05 Python
Python使用wxPython实现计算器
2018/01/30 Python
学习python需要有编程基础吗
2020/06/02 Python
Python 在函数上添加包装器
2020/07/28 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
一年级小学生评语
2014/04/22 职场文书
运动会的口号
2014/06/09 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
供电工程专业求职信
2014/08/09 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
指导老师鉴定意见
2015/06/05 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL