当前位置: 首页 > 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相比都这么慢?
  • 2018一半小结一波
  • Docker入门(二) - Dockerfile
  • idea + plantuml 画流程图
  • JavaScript实现分页效果
  • 闭包--闭包之tab栏切换(四)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端技术周刊 2019-01-14:客户端存储
  • 使用 QuickBI 搭建酷炫可视化分析
  • 与 ConTeXt MkIV 官方文档的接驳
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 最近的计划
  • 积累各种好的链接
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #android不同版本废弃api,新api。
  • #数学建模# 线性规划问题的Matlab求解
  • (二开)Flink 修改源码拓展 SQL 语法
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (七)c52学习之旅-中断
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)http-server应用
  • (转)菜鸟学数据库(三)——存储过程
  • (转)我也是一只IT小小鸟
  • .NET Core 版本不支持的问题
  • .Net 知识杂记
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net多线程总结
  • .NET简谈设计模式之(单件模式)
  • /etc/fstab 只读无法修改的解决办法
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [1204 寻找子串位置] 解题报告
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [Django 0-1] Core.Email 模块
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [Java]快速入门优先队列(堆)手撕相关面试题
  • [leetcode] Longest Palindromic Substring
  • [one_demo_4]不使用第3个变量交换两个变量的值