深入理解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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
php创建session的方法实例详解
Jan 27 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP四种基本排序算法示例
Apr 09 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
详解PHP中的Traits
Jul 29 PHP
php生成图片缩略图功能示例
Feb 22 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
Textarea根据内容自适应高度
2013/10/28 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
js实现数字滚动特效
2019/12/16 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
JS删除对象中某一属性案例详解
2020/09/08 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
简单学习Python多进程Multiprocessing
2017/08/29 Python
python中的随机函数小结
2018/01/27 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python字符串下标与切片及使用方法
2020/02/13 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
小学老师寄语大全
2014/04/04 职场文书
法律系毕业生求职信
2014/05/28 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
比较几种Redis集群方案
2021/06/21 Redis
python单向链表实例详解
2022/05/25 Python