深入理解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 缓存函数代码
Aug 27 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
php数组查找函数总结
Nov 18 PHP
php实现httpRequest的方法
Mar 13 PHP
php调用自己java程序的方法详解
May 13 PHP
基于PHP生成简单的验证码
Jun 01 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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中的traits实现代码复用使用实例
2015/05/13 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
javascript arguments使用示例
2014/12/16 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python实现合并两个数组的方法
2015/05/16 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Python中无限循环需要什么条件
2020/05/27 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
python db类用法说明
2020/07/07 Python
详解python算法常用技巧与内置库
2020/10/17 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
2015秋季运动会通讯稿
2015/07/18 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python