深入理解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
模板引擎Smarty深入浅出介绍
Dec 06 PHP
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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
请php正则走开
2008/03/15 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
php实现webservice实例
2014/11/06 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
node网页分段渲染详解
2016/09/05 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
python如何实现内容写在图片上
2018/03/23 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
行政助理岗位职责
2013/11/10 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
学生实习介绍信
2014/01/15 职场文书
校园文化建设方案
2014/02/03 职场文书
《故乡》教学反思
2014/04/10 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
浅析NIO系列之TCP
2021/06/15 Java/Android