深入理解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执行linux系统命令的常用函数使用说明
Apr 27 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
PHP中is_file()函数使用指南
May 08 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
php 多文件上传的实现实例
Oct 23 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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版(3)
2006/10/09 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
js简单时间比较的方法
2016/08/02 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
Python 实现异步调用函数的示例讲解
2018/10/14 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python datetime模块使用方法小结
2020/06/18 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
农业大学毕业生的个人自我评价
2013/10/11 职场文书
公务员职务工作的自我评价
2013/11/01 职场文书
计算机网络专业推荐信
2013/11/24 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
医学院毕业生自荐信范文
2014/03/06 职场文书
质量月活动策划方案
2014/03/10 职场文书
生日宴会主持词
2014/03/20 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
房屋产权证明书
2014/10/15 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书