深入理解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传输数据的代码
Nov 13 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
PHP中session变量的销毁
Feb 27 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP生成短网址方法汇总
Jul 12 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
gearman中任务的优先级和返回状态实例分析
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
Php Cookie的一个使用注意点
2008/11/08 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python类的专用方法实例分析
2015/01/09 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
行政助理岗位职责范文
2013/12/03 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Python连续赋值需要注意的一些问题
2021/06/03 Python