深入理解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 相关文章推荐
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
PHP单态模式简单用法示例
Nov 16 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
Yii 实现数据加密和解密
Mar 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
跟老齐学Python之一个免费的实验室
2014/09/14 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
django文档学习之applications使用详解
2018/01/29 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
中国好声音广告词
2014/03/18 职场文书
目标责任书范文
2014/04/14 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
开场白怎么写
2015/06/01 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
Python采集壁纸并实现炫轮播
2022/04/30 Python