深入理解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 相关文章推荐
PHP4.04简明安装
Oct 09 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP获取当前所在目录位置的方法
Nov 26 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
php实现转换html格式为文本格式的方法
May 16 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP数字金额转换成中文大写显示
Jan 05 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
JAVA/JSP学习系列之四
2006/10/09 PHP
也谈截取首页新闻 - 范例
2006/10/09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
node网页分段渲染详解
2016/09/05 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
Servlet如何得到服务器的信息
2015/12/22 面试题
高中生学习总结的自我评价范文
2013/10/13 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
国际会议邀请函范文
2014/01/16 职场文书
师德建设实施方案
2014/03/21 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
承诺函格式模板
2015/01/21 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
比赛口号霸气押韵
2015/12/24 职场文书