php基础学习之作用域和静态变量

news2024/11/28 5:42:48

作用域

变量(常量)能够被访问的区域,变量可以在常规代码中定义,也可以在函数内部定义

变量的作用域

在 PHP 中作用域严格来说分为两种,但是 PHP内部还定义一些在严格意义之外的一种,所以总共算三种——

  • 局部变量:在函数内部定义的变量(函数形参也属于函数内部),只允许在当前函数内部使用
  • 全局变量:在常规代码中定义的变量(函数外部定义),函数内部不可以直接使用
  • 超全局变量:系统定义的变量(预定义变量:$_GET,$_POST,$GLOBALS等),没有访问限制(函数内外都可以访问)

(下图通过一个脚本举例了三种变量,请看注释描述!)

局部和全局的联系

通过$GLOBALS联系局部和全局

全局变量和超全局变量有一个特殊联系,即$GLOBALS,所有的全局变量都会被存放在这个系统预定义变量中,它是一个数组,即使在函数内部也可以通过它来间接访问到全局变量

(虽然常规开发一般不用这种方式,但是这个知识点可以作为渗透测试利用

通过引用(址)传递联系局部和全局

在上一篇中提过的函数参数传递,就是一种最常规的联系局部和全局的方式

  • 值传递可以实现在函数内部间接访问全局变量,但不能改变全局变量(即实参)的值(因为形参是实参的一份拷贝)
  • 引用(址)传递则直接实现了在函数内部既能访问全局、又能改变全局

通过global关键字定义局部变量,联系局部和全局

在函数内部(局部)用global关键字定义一个变量(定义时不能赋值!),将赋予该变量全局属性,前提是该函数要先被调用且正常运行到定义该变量的代码

此时如果已经存在一个同名的全局变量,那么这个局部变量就直接成为这个同名全局变量


 静态变量

静态变量在各种编程语言都有存在,本来这个系列只打算记录php相对其它编程语言比较特殊的知识,来达到一个快速入门php基础的目的,但静态变量我将其作为一个重难的知识点,因此在此处也额外记录一下

概念

静态变量是在编程中用于存储固定值或者在整个程序执行过程中保持其值不变的变量。在许多编程语言中,静态变量通常与类或函数相关联,可以被所有实例或调用该函数的地方共享。这意味着,即使创建了多个对象或调用了多次函数,静态变量的值也只有一个,并且在程序执行期间保持不变

在C++中,静态变量通过使用static关键字来声明。在Java中,静态变量也使用static关键字来声明,通常位于类级别。在Python中,静态变量通常是通过在类内部定义的类变量实现的,但是Python没有严格的静态变量概念,因为它们不会像其他语言中那样保持严格的不变性。而php的静态变量和C++中的 静态变量基本属于完全相同的一个概念

举例说明

在下图这个例子中,函数test定义了一个普通变量$a,和一个静态变量$b,调用三次test函数,每次调用输出a和b的值,不难看出,每次调用test函数时,a都被重新赋值为1,而b则未被重新赋值

这正是因为:静态变量在脚本编译时就被赋了初始值,此后脚本在运行到静态变量的定义代码时,会直接跳过(也就不会重新赋值了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1450594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

紫微斗数双星组合:廉贞天相在子午

文章目录 前言内容总结 前言 紫微斗数双星组合:廉贞天相在子午 内容 紫微斗数双星组合:廉贞天相在子午 性格分析 廉贞星最喜天相星同度来制其恶,因天相星之水可剋制廉贞星之火。廉贞星最喜天相星同度来制其恶,使廉贞星变为较温…

MySQL 基础知识(六)之数据查询(二)

目录 6 数值型函数 7 字符串函数 8 流程控制函数 9 聚合函数 10 分组查询 (group by) 11 分组过滤 (having) 12 限定查询 (limit) 13 多表查询 13.1 连接条件关键词 (on、using) 13.2 连接算法 13.3 交叉连接 (cross join) 13.4 内连接 (inner join) 13.5 外连接 …

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)

效果演示 文章目录 效果演示系列目录前言存储加载物品信息源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快…

【leetcode994】腐烂的橘子(BFS)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 首先将所有烂橘子入队,然后常规BFS遍历,注意while的截止条件除了队列为空,新鲜橘子数量大于0(没新鲜橘子也没必要继续遍历,保证时间计算的正确性)&a…

Compose自定义动画API指南

很多动画API都可以自定义其参数达到不同的效果,Compose也提供了相应的API供开发者进行自定义动画规范。 AnimationSpec 主要用存储动画规格,可以自定义动画的行为,在animate*AsState和updateTransition函数中,此函数默认参数为s…

机器学习——聚类问题

📕参考:西瓜书ysu老师课件博客(3)聚类算法之DBSCAN算法 - 知乎 (zhihu.com) 目录 1.聚类任务 2.聚类算法的实现 2.1 划分式聚类方法 2.1.1 k均值算法 k均值算法基本原理: k均值算法算法流程: 2.2 基于…

语言与真实世界的关系(超级语言生成能力将促进世界深刻变化)

语言与真实世界之间存在着紧密且复杂的关系。在人类社会中,语言是认知、表达和交流现实世界的主要工具,它帮助我们构建并理解周围环境,并将我们的思维和经验概念化。 1. 符号与指代: 语言是一种符号系统,通过词汇、句…

SG3225EEN晶体振荡器规格书

SG3225EEN 晶振是EPSON/爱普生的一款额定频率25 MHz至500 MHz的石英晶体振荡器,6脚贴片,LV-PECL输出,3225封装常规有源晶振,具有小尺寸,轻薄型,高稳定性,低相位抖动,低电源电压&…

17.3.1.2 曝光

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 基本算法:先定义一个阈值,通常取得是128 原图像:颜色值color(R,G&#…

OpenTitan- 开源安全芯片横空出世

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【前端web入门第六天】02 flex布局

文章目录 Flex布局1.Flex组成2.主轴与侧轴对齐方式2.1 主轴对齐方式(横轴)2.2 侧轴对齐方式 (纵轴)2.3 修改主轴方向 3.弹性伸缩比4.弹性换行与行对齐方式4.1 弹性换行4.2 行对齐方式 Flex布局 1.Flex组成 设置方式:给父元素设置display: flex,子元素可以自动挤压…

找负环(图论基础)

文章目录 负环spfa找负环方法一方法二实际效果 负环 环内路径上的权值和为负。 spfa找负环 两种基本的方法 统计每一个点的入队次数,如果一个点入队了n次,则说明存在负环统计当前每个点中的最短路中所包含的边数,如果当前某个点的最短路所…

【C++】---类和对象(上)入门

一、类的定义 1.那么众所周知,C语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数的调用来逐步解决问题 2.而C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间交…

【自然语言处理】:实验1布置,Word2VecTranE的实现

清华大学驭风计划 因为篇幅原因实验答案分开上传,答案链接http://t.csdnimg.cn/5cyMG 如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~ 实验1: Word2Vec&TranE的…

使用HTML、CSS和JavaScript构建响应式企业官网

使用HTML、CSS和JavaScript构建响应式企业官网,web网页设计与制作-htmlcssjs实现企业官网展示。 页面效果展示 pc端和移动端 动态演示 文件目录 assets文件夹:静态资源目录,主要存放css、fonts、images、js等静态资源文件; fa…

Unity如何修改预制体(预制件)?

文章目录 19 复制复制复制,预制体与变体 19 复制复制复制,预制体与变体 【预制件】 预制件作用:方便复用 【预制件】的制作 直接拖拽,从层级面板 -> 项目面板。层级面板中当前图标会变蓝,子物体名字变蓝色。预制件…

《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(5)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(4) 13.1 IOMMU 13.1.3 AMD处理器的IOMMU AMD处理器的IOMMU技术与Intel的VT-d技术类似,其完成的主要功能也类似。AMD率先提出了IOMMU的概念…

(11)Hive调优——explain执行计划

一、explain查询计划概述 explain将Hive SQL 语句的实现步骤、依赖关系进行解析,帮助用户理解一条HQL 语句在底层是如何实现数据的查询及处理,通过分析执行计划来达到Hive 调优,数据倾斜排查等目的。 官网指路: https://cwiki.ap…

【网站项目】228高校教师电子名片系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Vi 和 Vim 编辑器

Vi 和 Vim 编辑器 vi 和 vim 的基本介绍 Linux 系统会内置 vi 文本编辑器 Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富&…