深入理解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 相关文章推荐
第四节--构造函数和析构函数
Nov 16 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
php 过滤器实现代码
Aug 09 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
PHP判断函数是否被定义的方法
Jun 21 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 adodb连接不同数据库
2009/03/19 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
MySQL适配器PyMySQL详解
2017/09/20 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
如何基于python实现脚本加密
2019/12/28 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
银行竞聘报告范文
2014/11/06 职场文书
前台接待员岗位职责
2015/04/15 职场文书
《司马光》教学反思
2016/02/22 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
JavaScript函数柯里化
2021/11/07 Javascript
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫