当前位置: 首页 > news >正文

php自定义函数变量,php自定义函数之变量作用域

我们通过前面的章节函数定义部份的学习我们知道了几个不同的规矩:

函数定义时后括号里面接的变量是形式上的参数(形参),与函数体外的变量没有任何关系。仅仅是在函数内部执行

函数内声明的变量也与函数外的变量没关系。

但是,我们实际的处理情况中会遇到这样的一个情况:

我想在函数体内定义的变量在函数体外用

我想把函数体外的变量拿到函数体内来使用

这个时候我们就需要用到超全局变量。我们来回顾一下之前的知识点:全局变量名功能说明$_COOKIE得到会话控制中cookie传值

$_SESSION得到会话控制中session的值

$_FILES得到文件上传的结果

$_GET得到get传值的结果

$_POST得到post传值的结果

$_REQUEST即能得到get的传值结果,也能得到Post传值的结果

我们来通过实验来观察 一下外部变量(超全局变量)的特点,打破本章开头我们总结的规律:

我们定义一下global.html页现来写HTML内容:

超全局数组实验

我们将html的内容通过form表单提交给了glob.php页面,我们现在来写glob.php:<?php

function demo(){

echo $_POST['hongniu'];

}

demo();

?>

通过这个小例子,你会发现超全局的$_POST等这一系列的超全局变量(外部变量)在函数内部也是可以用的。没有本文开始处变量作用域的限制。其实我们所有声明的变量都放到了$GLOBALS这个数组下面,举个例子:<?php

$hello = 10;

echo $GLOBALS['hello'].'
';

$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哟
';

//调用test()函数,将通过$GLOBALS['hongniu'],把$hongniu的值改变掉

$GLOBALS['hongniu'] = '帮助别人很快乐';

}

test();

//发现是不是输出的值变了呀?

echo $hongniu;

?>

通过上例:我们发现通过$GLOBALS['hongniu'],把$hongniu的值改变掉,所以在最后输出$hongniu的时候,值发生了变化。

3.通过$GLOBLAS,在函数内创建全局变量<?php

function hello(){

$GLOBALS['que'] = '提神喝茶更好哟';

echo '你调了一下函数hello
';

}

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 后写 $变量 = 值。

global

读音:[ˈgləʊbl]

解释:全局的,全球的

相关文章:

  • python 判断文件类型,利用Python获取文件类型
  • php将ip写入文件,php – 允许仅从1个IP地址访问所有文件,并将所有其他文件重定向到其他文件...
  • oracle中blob的表导出,把表中的blob字段导出,并且用一个唯一名称来命名导出的文件。...
  • linux zip压缩排除目录,Linux系统zip压缩命令详细参数,附文件排除选项的正确用法...
  • linux 内核版本 4.4,Linux Kernel 4.4 正式发布下载
  • linux内核找不到sata分区表,分区表坏了,我的linux不见了
  • amd支持的Linux内核,Linux Kernel 4.7.2版本发布:改善对AMDGPU和ARM64的支持
  • linux grep 获取当天时间段,linux – 如何在一个时间范围内grep httpd error_log?
  • Linux内核i2c通信,绝对干货!基于Cortex-A9,分析Linux内核I2C架构
  • linux中文本文件过滤搜索,Linux命令(八)过滤文本 grep
  • linux获得ram地址,Linux 如何查看系統硬體的記憶體(RAM)資訊
  • linux qt多屏幕输出,QT5 Ubuntu下c++调用linux命令、显示输出、执行多条命令
  • linux 获取时间间隔,获取时间间隔避免误差的方法
  • linux下for循环怎么退出,Linux之for循环进程终止的方法
  • linux cp scp rsync,为什么我的rsync与纯cp甚至scp相比都这么慢?
  • 【5+】跨webview多页面 触发事件(二)
  • Android Studio:GIT提交项目到远程仓库
  • Electron入门介绍
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • XML已死 ?
  • 彻底搞懂浏览器Event-loop
  • 简单实现一个textarea自适应高度
  • 坑!为什么View.startAnimation不起作用?
  • 如何设计一个微型分布式架构?
  • 使用SAX解析XML
  • 手写一个CommonJS打包工具(一)
  • 线性表及其算法(java实现)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习JavaScript数据结构与算法 — 树
  • 移动端 h5开发相关内容总结(三)
  • 从如何停掉 Promise 链说起
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • (C++)八皇后问题
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (第61天)多租户架构(CDB/PDB)
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三)Honghu Cloud云架构一定时调度平台
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • ***测试-HTTP方法
  • ..回顾17,展望18
  • ./configure、make、make install 命令
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net2005怎么读string形的xml,不是xml文件。
  • .net操作Excel出错解决
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...