深入理解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 递归效率分析
Nov 24 PHP
php 抽象类的简单应用
Sep 06 PHP
php中日期加减法运算实现代码
Dec 08 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
php准确计算复活节日期的方法
Apr 18 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
PHP中__set()实例用法和基础讲解
Jul 23 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注入实例
2006/10/09 PHP
用PHP 4.2书写安全的脚本
2006/10/09 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
php模板引擎技术简单实现
2016/03/15 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
jquery map方法使用示例
2014/04/23 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python入门篇之文件
2014/10/20 Python
Python open()文件处理使用介绍
2014/11/30 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
中学生自我鉴定
2014/02/04 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
公司股东出资证明书
2014/11/01 职场文书
人事局接收函
2015/01/30 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
保护地球的宣传语
2015/07/13 职场文书
养成教育主题班会
2015/08/13 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
晶体管来复再生式二管收音机
2021/04/22 无线电
比较node.js和Deno
2021/04/27 Javascript
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
基于Python实现一个春节倒计时脚本
2022/01/22 Python
Nginx安装配置详解
2022/06/25 Servers