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

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

作用域

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

变量的作用域

在 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则未被重新赋值

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

相关文章:

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

作用域 变量(常量)能够被访问的区域,变量可以在常规代码中定义,也可以在函数内部定义 变量的作用域 在 PHP 中作用域严格来说分为两种,但是 PHP内部还定义一些在严格意义之外的一种,所以总共算三种—— 局部…...

SP1:基于Plonky3构建的zkVM

1. 引言 SP1为SuccictLab开源的,基于Plonky3构建的zkVM。 开源代码见: https://github.com/succinctlabs/sp1(Rust) 当前暂未实现onchain-verifier,但会采用标准的STARK->SNARK verifier。 SP1 zkVM基于的指令…...

Python爬虫之文件存储#5

爬虫专栏:http://t.csdnimg.cn/WfCSx 文件存储形式多种多样,比如可以保存成 TXT 纯文本形式,也可以保存为 JSON 格式、CSV 格式等,本节就来了解一下文本文件的存储方式。 TXT 文本存储 将数据保存到 TXT 文本的操作非常简单&am…...

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…...

Spring-面试题

一、Spring 1、Spring的优势 通过IOC、AOP简化java开发 IOC减低业务对象替换的复杂性,降低耦合AOP允许将一些通用的事务、日志进行集中处理,从而提高更好的复用性Spring生态圈低嵌入式涉及,代码污染小高度开放性,用的人多2、Spring的核心 IOC控制反转: Spring容器为我们创…...

Flink理论—容错之状态

Flink理论—容错之状态 在 Flink 的框架中,进行有状态的计算是 Flink 最重要的特性之一。所谓的状态,其实指的是 Flink 程序的中间计算结果。Flink 支持了不同类型的状态,并且针对状态的持久化还提供了专门的机制和状态管理器。 Flink 使用…...

【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表,判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 NULLhttp://t.cs…...

智慧校园规划建设方案

校园信息化建设呈现智能化、应用多样化发展趋势,多种技术和应用交叉渗透至校园生活的各个方面,全面的智慧校园时代已经到来。 对智慧校园的四大应用领域分析 智慧的教学 信息共享交互:建立信息发布、共享、传播与交互的公共平台 教学流程…...

003 - Hugo, 创建文章

003 - Hugo, 创建文章创建文章单个md文件md文件图片总结 文章内容Front Matter文章目录数学公式的显示KaTeXMathJax 图片 003 - Hugo, 创建文章 创建文章 单个md文件 创建文章的方式: 手动创建:在post目录下,手动创建md文件。命令创建&am…...

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO

目录 一、GPIO 概述二、GPIO模块相关API三、实例四、GPIO HDF驱动开发4.1、LED驱动程序(待续...)4.2、LED驱动配置(待续...) 坚持就有收获 轻量系统设备通常需要进行外设控制,例如温湿度数据的采集、灯开关的控制,因此在完成内核开发后,需要进…...

《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)

文章目录 7.1 网络基础和 Java 中的网络 - 揭开神秘的面纱7.1.1 基础知识7.1.2 重点案例:实现一个简单的聊天程序7.1.3 拓展案例 1:使用 UDP 进行消息广播7.1.4 拓展案例 2:建立一个简单的 Web 服务器 7.2 创建客户端和服务器 - 构建沟通的桥…...

用keras对电影评论进行情感分析

文章目录 下载IMDb数据读取IMDb数据建立分词器将评论数据转化为数字列表让转换后的数字长度相同加入嵌入层建立多层感知机模型加入平坦层加入隐藏层加入输出层查看模型摘要 训练模型评估模型准确率进行预测查看测试数据预测结果完整函数用RNN模型进行IMDb情感分析用LSTM模型进行…...

每日OJ题_算法_递归④力扣24. 两两交换链表中的节点

目录 ④力扣24. 两两交换链表中的节点 解析代码 ④力扣24. 两两交换链表中的节点 24. 两两交换链表中的节点 难度 中等 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即…...

110 C++ decltype含义,decltype 主要用途

一,decltype 含义和举例 decltype有啥返回啥,auto则不一样,auto可能会舍弃一些东西。 decltype 是 C11提出的说明符。主要作用是:返回操作数的数据类型。 decltype 是用来推导类型,decltype对于一个给定的 变量名或…...

PYTHON 120道题目详解(85-87)

85.Python中如何使用enumerate()函数获取序列的索引和值? enumerate()函数是Python的内置函数,它可以将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。 以下是一个…...

【Linux】Linux编译器-gcc/g++ Linux项目自动化构建工具-make/Makefile

目录 Linux编译器-gcc/g使用 1.背景知识 Linux中头文件的目录在 Linux 库 条件编译的典型应用 2.gcc如何完成 动态库 vs 静态库 debug && release Linux项目自动化构建工具-make/Makefile 背景 用法 特殊符号 Linux编译器-gcc/g使用 1.背景知识 预处理&am…...

sqlserver 子查询 =,in ,any,some,all的用法

在 SQL Server 中,子查询常用于嵌套在主查询中的子句中,以便根据子查询的结果集来过滤主查询的结果,或者作为主查询的一部分来计算结果。 以下是 、IN、ANY、SOME 和 ALL 运算符在子查询中的用法示例: 使用 运算符进行子查询&a…...

基于MapVGL的地理信息三维度数据增长可视化

写在前面 工作中接触,简单整理博文内容为 基于MapVGL的地理信息维度数据增长可视化 Demo理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都…...

天锐绿盾|防泄密系统|计算机文件数据\资料安全管理软件

“天锐绿盾”似乎是一款专注于防泄密和计算机文件数据/资料安全管理的软件。在信息安全日益受到重视的今天,这样的软件对于保护企业的核心数据资产和防止敏感信息泄露至关重要。 通用地址:www.drhchina.com 防泄密系统的主要功能通常包括: 文…...

leetcode刷题(罗马数字转数字)

1.题目描述 2.解题思路 这时候已经给出了字母对应的数字,我们只需要声明一个字典,将罗马数字和数字之间的对应关系声明即可。其中可能涉及到会出现两个连续的罗马字母代表一个数字,这时候我们需要判断遍历的字符和将要遍历的下一个字符是否存…...

3分钟掌握医学文献关键信息:本草模型如何从肝癌研究中提取核心知识

3分钟掌握医学文献关键信息:本草模型如何从肝癌研究中提取核心知识 【免费下载链接】Huatuo-Llama-Med-Chinese Repo for BenTsao [original name: HuaTuo (华驼)], Instruction-tuning Large Language Models with Chinese Medical Knowledge. 本草(原名…...

从零开始:用STM32CubeMX+Keil5开发计算器的5个关键陷阱与解决方案

从零开始:用STM32CubeMXKeil5开发计算器的5个关键陷阱与解决方案 当你第一次尝试用STM32CubeMX和Keil5开发一个计算器时,可能会觉得这不过是几个简单数学运算的组合。但真正动手后,你会发现从工具链配置到算法实现,处处都是"…...

RoboMaster装甲板灯条匹配算法实战:从图像预处理到目标框定(附完整C++/OpenCV源码)

1. 项目背景与核心挑战 RoboMaster机甲大师赛中的装甲板识别是自动瞄准系统的关键技术难点。赛场上高速移动的机器人装甲板通常配备LED灯条作为视觉标识,这种设计让计算机视觉算法能够在复杂环境下快速定位目标。但实际开发时会遇到几个头疼的问题:强光干…...

ROS中tf2坐标系命名规范详解:为什么你的/world会报Invalid argument错误

ROS中tf2坐标系命名规范详解:为什么你的/world会报Invalid argument错误 在ROS机器人开发中,坐标系转换(tf2)系统是构建空间感知的核心基础设施。许多开发者第一次遇到Invalid argument "/world" passed to canTransfor…...

互联网应用架构:LiuJuan20260223Zimage高并发服务设计

互联网应用架构:LiuJuan20260223Zimage高并发服务设计 1. 引言 想象一下这样的场景:你的图片服务突然火了,每秒有几十万用户同时上传和查看图片,服务器开始报警,响应速度越来越慢,用户体验直线下降。这不…...

Exo分布式AI集群架构深度解析:多节点选举与容错机制实现原理

Exo分布式AI集群架构深度解析:多节点选举与容错机制实现原理 【免费下载链接】exo Run your own AI cluster at home with everyday devices 📱💻 🖥️⌚ 项目地址: https://gitcode.com/GitHub_Trending/exo8/exo Exo是一…...

GraphRAG大揭秘:微软如何用知识图谱让AI问答更精准,效率翻倍!

微软推出的GraphRAG通过引入知识图谱技术,有效解决了传统RAG在信息连接和归纳总结上的不足。GraphRAG利用大模型构建知识图谱,实现实体和关系的结构化表示,显著提升答案的准确度与完整性,并支持多跳推理。文章详细介绍了知识图谱的…...

SAP ABAP RFC函数外部调用Debug全攻略:从SE37设置到断点跟踪

SAP ABAP RFC函数外部调用Debug全攻略:从SE37设置到断点跟踪 在跨系统集成的复杂场景中,RFC函数调试往往让开发者头疼不已。想象一下这样的场景:你开发的RFC接口在生产环境突然报错,但本地测试一切正常;或者第三方系统…...

Hunyuan-MT Pro详细步骤:本地启动http://localhost:6666翻译终端

Hunyuan-MT Pro详细步骤:本地启动http://localhost:6666翻译终端 1. 快速了解Hunyuan-MT Pro Hunyuan-MT Pro是一个基于腾讯混元开源模型构建的现代化翻译工具,它把强大的AI翻译能力包装成了一个简单易用的网页应用。你不需要懂复杂的技术,…...

破局与重构:基于“智慧大脑”的企业全面数据化经营深度解构(PPT)

“在数字时代,企业最大的风险不是数据的匮乏,而是决策依然依赖经验直觉而非数据驱动。” —— 这份《数字化建设企业经营解决方案》文档,不仅是一份技术蓝图,更是对传统企业经营管理模式的一次彻底颠覆。它描绘了一个从“人治”迈…...