深入理解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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
PHP自定义函数收代码
Aug 01 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
php 使用array函数实现分页
Feb 13 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 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连接access数据库
2008/03/27 PHP
浅析PHP绘图技术
2013/07/03 PHP
PHP类的反射用法实例
2014/11/03 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php实现等比例压缩图片
2018/07/26 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
使用js 设置url参数
2013/07/08 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
一套Java笔试题
2016/08/20 面试题
SQL Server面试题
2013/04/04 面试题
一年级家长会邀请函
2014/01/25 职场文书
研究生毕业鉴定
2014/01/29 职场文书
优乐美广告词
2014/03/14 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python