深入理解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数组实现无限分类,不使用数据库,不使用递归.
Dec 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php empty函数 使用说明
Aug 10 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
基于php权限分配的实现代码
Apr 28 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
Smarty模板变量调节器用法分析
May 23 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
php5与php7的区别点总结
Oct 11 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 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
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
Vue组件创建和传值的方法
2018/08/17 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python生成随机MAC地址
2015/03/10 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
Python基于当前时间批量创建文件
2020/05/07 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
学术会议欢迎词
2014/01/09 职场文书
同事打架检讨书
2014/02/04 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
技术总监管理职责范本
2014/03/06 职场文书
公司联欢会主持词
2015/07/04 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
求职信如何撰写?
2019/05/22 职场文书