php自定义函数之变量作用域
我们通过前面的章节函数定义部份的学习我们知道了几个不同的规矩:
函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系。仅仅是在函数内部执行大理石量具哪家好
函数内声明的变量也与函数外的变量没关系。
但是,我们实际的处理情况中会遇到这样的一个情况:
我想在函数体内定义的变量在函数体外用
我想把函数体外的变量拿到函数体内来使用
这个时候我们就需要用到超全局变量。我们来回顾一下之前的知识点:
| 全局变量名 | 功能说明 |
|---|---|
| $_COOKIE | 得到会话控制中cookie传值 |
| $_SESSION | 得到会话控制中session的值 |
| $_FILES | 得到文件上传的结果 |
| $_GET | 得到get传值的结果 |
| $_POST | 得到post传值的结果 |
| $_REQUEST | 即能得到get的传值结果,也能得到Post传值的结果 |
我们来通过实验来观察 一下外部变量(超全局变量)的特点,打破本章开头我们总结的规律:
我们定义一下global.html页现来写HTML内容:
<html>
<head>
<title>超全局数组实验</title>
</head>
<body>
<!--先用POST来实验,以后你可以改成GET哟 -->
<form action="glob.php" method="post">
<input type="text" name="hongniu" /><br /> <input type="submit" value="提交" />
</form> </body>
</html>
我们将html的内容通过form表单提交给了glob.php页面,我们现在来写glob.php:
<?php
function demo(){
echo $_POST['hongniu'];
}
demo();
?>
通过这个小例子,你会发现超全局的$_POST等这一系列的超全局变量(外部变量)在函数内部也是可以用的。没有本文开始处变量作用域的限制。其实我们所有声明的变量都放到了$GLOBALS这个数组下面,举个例子:
<?php
$hello = 10; echo $GLOBALS['hello'].'<br />'; $GLOBALS['hello'] = '我爱你'; echo $hello; ?>
通过上例,你会发现$变量名是等价于$GLOBALS['变量名'] 。所有的变量都放到了$GLOBALS里面了。而$GLOBALS也是全局的。
因此,我们能够来达到我们的目的:将函数体内的变量(局部变量)在函数外部使用。也可以让函数外的变量到函数里面来使用。
1.通过$GLOBLAS来读取外部变量
<?php
$one = 10;
function demo(){
$two = 100;
$result = $two + $GLOBALS['one'];
return $result;
}
//你会发现结果变成了110
echo demo();
?>
上例中:我们将函数体外的变量通过$GLOBALS拿到了函数体使用。所以,打破了函数外的变量不能在函数体内使用的限定。
2.通过$GLOBLAS,在函数内修改外部变量
<?php
$hongniu = '我是一个兵,来自老百姓';
function test(){
echo '执行了函数test哟<br />';
//调用test()函数,将通过$GLOBALS['hongniu'],把$hongniu的值改变掉
$GLOBALS['hongniu'] = '帮助别人很快乐';
}
test();
//发现是不是输出的值变了呀?
echo $hongniu;
?>
通过上例:我们发现通过$GLOBALS['hongniu'],把$hongniu的值改变掉,所以在最后输出$hongniu的时候,值发生了变化。
3.通过$GLOBLAS,在函数内创建全局变量
<?php
function hello(){
$GLOBALS['que'] = '提神喝茶更好哟';
echo '你调了一下函数hello<br />';
}
hello();
echo $que;
?>
上例中,我们发现$que是不存在的,可以调用函数hello()后,在函数外部可以执行echo $que了,能够看到结果:提神喝茶更好。我们明白了,函数内声明的变量,通过$GLOBALS声明一个变量,也能够显示出来。
下面的知识是【了解】级别,我们越来越少的使用这种方式来声明全局变量了。在函数内使用global关键词后面跟一个或多个变量,就把变量变为了全局变量,格式如下:
global $变量1[,变量2,....变量n]
在global后面可以跟一个或者多个变量,变量用逗号分开。
<?php
$a = 10;
$b = 100;
function test(){
global $a , $b;
echo $a + $b;
}
//结果是不是显示出来了?
test();
?>
上例中,你还可以试试在global关键词后面跟着未创建的变量,在函数体内定义变量值,修改变量的值试试。其实与$GLOBALS一样,只是用法不同而已。
注意:
不可在global 后写 $变量 = 值。
php自定义函数之变量作用域的更多相关文章
- python 函数及变量作用域及装饰器decorator @详解
一.函数及变量的作用 在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...
- python学习笔记三:函数及变量作用域
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
- Python(五) 包、模块、函数与变量作用域
一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...
- Python 包、模块、函数、变量作用域
Python 项目的组织结构 - 包 -- 模块 --- 类 ---- 函数.变量 Python是利用包和模块来组织一个项目的. 包: 包的物理表现是一个文件夹,但是一个文件夹却不一定是个包, ...
- Python3(五) 包、模块、函数与变量作用域
一.Python项目的组织结构 最顶级的组织结构:包(文件夹) 第二个层级:模块(文件) 第三个层级:类 第四个层级:函数.变量(不属于组织结构,是类本身的特性) 二.Python包与模块的名字 1. ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- js:函数与变量作用域的提升
一.要彻底理解JS的作用域和Hoisting,只要记住以下三点即可: 1.所有申明都会被提升到作用域的最顶上 2.同一个变量申明只进行一次,并且因此其他申明都会被忽略 3 ...
- JS函数、变量作用域
函数参数 函数的()中指定一个或多个形参(形式参数),多个形参之间用,号隔开,声明形参相当于在函数内部声明了对应的变量,但不赋值.在调用时在()中指定实参 调用时解析器不会检查实参类型.数量,实参可 ...
- Python学习(21):Python函数(5):变量作用域与闭包
转自 http://www.cnblogs.com/BeginMan/p/3179040.html 一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除, ...
随机推荐
- 嵌入式02 STM32 实验01 端口复用和重映射
内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface ...
- python学习-62 类属性的增 删 该 查
类属性 1.类属性 类属性又称为静态变量,或者是静态数据.这些数据是与它们所属的类对象绑定的,不依赖于任何类实例. 2.增 删 改 查 class zoo: country = 'china' def ...
- 在bat批处理中简单的延时方法
使用for命令: 延时1s左右的方法: @echo off echo %time% ,,) do echo %%i>nul echo %time% pause %time%是用来显示延时时间,实 ...
- fastjson框架如何处理boolean?CURRENT_TIMESTAMP使用报错?什么是 ONLINE DDL 及 pt-online-schema-change ? getBytes引起的乱码问题?
一.使用fastjson框架进行序列化时,若莫个参数为Boolean类型,而json里的值是其它类型时,框架如何处理? 1.true, false,正常赋值2.int类型,若为1,则为true,否则为 ...
- core文件问题
core文件问题 Linux系统core涉及到的问题 core文件的问题具体可以参照系统的man手册(man core) 能否生成core文件 ulimit -c 磁盘权限问题 进程权限问题 生成co ...
- fiddler数据过滤功能
设置会话过滤的菜单如下图: 1.勾选Use Filters选项表示使用过滤设置,不勾选则不使用 2.Actions:有四个选项 Run Filterset now:立即运行过滤设置: Load Fil ...
- 【开发工具】- Xshell工具的下载和安装
下载地址:https://www.netsarang.com/zh/free-for-home-school/ Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Micro ...
- canvas炫酷时钟
canvas炫酷时钟 实现的功能 主要用到canvas的一些基础api 直接看效果 html: <canvas id="myCanvas" width="500&q ...
- awvs 中文手册详细版(含10.5及12版本)
目录: 0×00.什么是Acunetix Web Vulnarability Scanner ( What is AWVS?) 0×01.AWVS安装过程.主要文件介绍.界面简介.主要操作区域简介(I ...
- ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口
详见:https://blog.csdn.net/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及Li ...