深入理解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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
php递归json类实例
Dec 02 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
简述php环境搭建与配置
Dec 05 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 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 CKEditor 上传图片实现代码
2009/11/06 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
JavaScript变量声明详解
2014/11/27 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
美国学校用品、教室和教学商店:Discount School Supply
2018/04/04 全球购物
25道Java面试题集合
2013/05/21 面试题
土木工程师职业规划范文
2014/03/07 职场文书
室内设计专业自荐信
2014/05/31 职场文书
质量月活动总结
2014/08/26 职场文书
收入证明申请书
2015/06/12 职场文书
MySQL 原理与优化之Update 优化
2022/08/14 MySQL