深入理解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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP基于进程控制函数实现多线程
Dec 09 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
use jscript List Installed Software
2007/06/11 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
百年校庆节目主持词
2014/03/27 职场文书
市场营销调查计划书
2014/05/02 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python