深入理解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 win下Socket方式发邮件类
Aug 21 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
smarty中英文多编码字符截取乱码问题解决方法
Oct 28 PHP
Laravel实现用户注册和登录
Jan 23 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
php如何获取Http请求
Apr 30 PHP
PHP 实现链式操作
Mar 09 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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&amp;mysql(二)
2006/10/09 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
js如何打印object对象
2015/10/16 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Python threading多线程编程实例
2014/09/18 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
基于python历史天气采集的分析
2019/02/14 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
python 操作hive pyhs2方式
2019/12/21 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
物业消防安全责任书
2014/07/23 职场文书
2014年党小组工作总结
2014/12/20 职场文书
业务员辞职信范文
2015/03/02 职场文书
出国留学导师推荐信
2015/03/26 职场文书
仓库管理制度范本
2015/08/04 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js