web安全php基础_php常量及可变变量(魔术变量)

news2024/11/19 19:34:28

常量

php中常量是一个简单值的标识符。该值在脚本中不能改变。

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

常量有两点需要特别注意的地方

  • 常量在整个脚本中都可以使用。
  • 常量值被定义后,在脚本的其他任何地方都不能被改变

设置 PHP 常量

设置常量,使用 define() 函数,函数语法如下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

该函数有三个参数:

  • name:必选参数,常量名称,即标志符。

  • value:必选参数,常量的值。

  • case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。

注意:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。(可以使用@忽略警告)

示例如下,

<?php
	define('hi','php是世界上最好的语言',false);
	echo hi;
	
	echo "<br/>";
	//第三个参数true已被弃用,只能接收false参数,想要忽略警告则添加@
	@define('hello','helloWorld!!!',true);
	#正常输出
	echo hello;
	#报错,因为true被弃用现在常量大小写敏感
	echo HELLO;
?>

在这里插入图片描述
报错的意思是 不区分大小写的常量已弃用。此常量的正确大小写是“hello” 在第11行

常量是全局的

常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。

以下实例演示了在函数内使用常量,即便常量定义在函数外也可以正常使用常量。

<?php
define("PHP", "PHP是世界上最好的语言");

function myTest() {
    echo PHP;
}

myTest();    // 输出PHP是世界上最好的语言
?>

在这里插入图片描述

常量与变量细节

  1. 常量和(全局)变量在不同的名字空间中。这意味着例如 HELLO 和 $HELLO是不同的。
<?php
	define("HELLO", "PHP是世界上最好的语言");
	$HELLO='hello world!!!';
	echo HELLO;
	echo "<br/>";
	echo $HELLO;
?>

在这里插入图片描述

  1. 常量和变量不同,常量只能包含标量数据(boolean,integer,float 和 string)

可变变量(魔术变量)

到了我最喜欢的可变变量了,在PHP中有一个其他类型的变量,“可变变量”。可变变量是一种PHP独特的变量,他允许动态改变一个变量的名称。,可变变量声明为两个$$符(使用两个美元符号($))

<?php
$a='hello  world';
$$a="php是世界上最好的语言"; //这就是一个可变变量
var_dump($a);
echo "<br/>";
var_dump($$a);
?>

这时两个变量都被定义了,我们可以尝试输出他们,如下,变量正常输出了
在这里插入图片描述

但这里有一个有意思的问题,当我们正常声明了一个可变变量,我们可以再直接声明一个可变变量

<?php
	$a='hello  world';
	$$a="php是世界上最好的语言"; //这就是一个可变变量
	$$b='hhh'; //直接声明$$b编译器不再报错
	var_dump($a);
	echo "<br/>";
	var_dump($$a);
	echo '<br/>';
	var_dump($b);
	echo '<br/>';
	var_dump($$b);
?>

查看他们的输出结果,可以看到$b的值依旧是NULL
在这里插入图片描述

可变变量的作用

上面说到了,可变变量是一种PHP独特的变量,他允许动态改变一个变量的名称
即,在PHP中如果在一个变量名称前面放两个美元($)符号,PHP就会废弃右面的变量,而取其值,然后,将该值作为“真正”的变量名称。例如:
实例如下

<?php
	$a='hello';
	$hello="php是世界上最好的语言"; 
	var_dump($a);
	echo "<br/>";
	var_dump($$a);
	echo  "<br/>";
	var_dump($hello); //当掉用$hello的时候输与$$a是一样的
?>

输出如下,
在这里插入图片描述
当$a的值发生改变时,通过$$a的调用的变量也得相应的改变

<?php
	$a='hello';
	//因为$a=hello,使用$$a=$hello(hello是$a的值,当有两个$时会被这样解析);
	$hello="php是世界上最好的语言"; //原本是打算写$$a的这才是可变变量的声明方式,但是不宜于理解
	var_dump($a);
	echo "<br/>";
	var_dump($$a);
	echo  "<br/>";
	var_dump($hello); //当掉用$hello的时候输与$$a是一样的
	echo  "<br/>";
	$a='hi';
	var_dump($$a);//$$a会被解析从$hi,因为没有声明过$hi,所以$$a输出null
?>

输出如下
在这里插入图片描述

可变变量之于数组

要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}
示例如下

<?php
	$a=array("aa","bb","cc");
	//这的${$a[0]}会被浏览器解析成${aa}(aa就是$a[0]的值),也就是说,这样声明的变量,可以使用$aa取出来
	${$a[0]}='PHP是世界上最好的语言';
	echo $aa;
	echo "<br/>";
	echo ${$a[0]};
	echo "<br/>";
	${$a}[0]="hello world";
	echo ${$a}[0];
?>

输出如下
在这里插入图片描述

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

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

相关文章

企业级CDP数据工程实践(一):建设中的最佳实践

大家好&#xff0c;许久未见&#xff0c;我是云祁&#xff5e; 今天想和大家分享下 企业级CDP项目 建设中的数据工程实践。 在很多情况下&#xff0c;大家可能会将数据工程与ETL的过程画上等号&#xff0c;但实际上ETL只是数据工程的一部分&#xff0c;其工作量通常仅占整个数据…

I.MX6ULL_Linux_驱动篇(40)异步通知

在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的&#xff0c;对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知&#xff0c;报告自己可以访问&#xff0c;然后应用程序在从驱动程序中读取…

Linux——进程信号(下)

目录 总结 一&#xff0c;信号保存 1.1 阻塞信号 2.2 信号在内核(操作系统)中的表示 2.3 系统接口 2.3.1 sigset_t信号集 2.3.2 信号集的操作函数 2.3.3 sigprocmask 2.3.4 sigpending 2.4 实验样例 三&#xff0c;信号处理 3.1 信号捕捉 3.2 sigaction接口 3.3 实验…

2022年真题 - 17 - 系统优化

系统优化 题目配置验证配置 题目 StorageSrv - 系统优化 系统资源限制设置&#xff1a;设置所有用户的硬件跟软件的最大进程数、最大文件打开数为65535&#xff1b;开启 IPv4 恶意 icmp 错误消息保护&#xff1b;开启 SYN 洪水攻击保护&#xff1b;允许系统打开的端口范围为 …

服务网关 Gateway

服务网关 Gateway 服务网关介绍Gateway 介绍Gateway 和 Nginx 网关的区别Gateway 核心概念Gateway工作流程 Gateway 案例Predicate&#xff08;断言&#xff09;After 路由谓词工厂Before路由谓词工厂Between 路由谓词工厂Cookie路由谓词工厂Header 路由谓词工厂Host 路由谓词工…

支付宝支付(六):小程序支付(Go+Gin+内网穿透)

一、前置条件 &#xff08;1&#xff09;go语言&#xff0c;1.18 &#xff08;2&#xff09;Gin、第三方依赖包&#xff1a;gopay【github.com/go-pay/gopay/alipay】https://github.com/go-pay/gopay/blob/main/doc/wechat_v3.md &#xff08;3&#xff09;支付宝支付相关信…

Java面向对象程序开发——JDK8新特性

文章目录 网络编程入门知识JDK8新特性Lambda表达式以多线程为例&#xff1a;Lambda结合for循环&#xff1a; Stream流获取一个流的2种常用的方式&#xff1a;常用方法终结方法延迟方法 案例 网络编程入门知识 软件结构、协议分类、网络通信协议、网络编程三要素、TCP通信协议、…

爬虫的分布式思维与实现思路

爬虫的分布式思维与实现思路 基本构架 scrapy-redis实现分布式&#xff0c;其实从原理上来说很简单&#xff0c;这里为描述方便&#xff0c;我们把自己的核心服务器称为master&#xff0c;而把用于跑爬虫程序的机器称为slave 我们知道&#xff0c;采用scrapy框架抓取网页&…

netty学习(4):通过SpringBoot Web发送消息实现netty实现多个客户端与服务器通信

1. 基于netty学习&#xff08;3&#xff09;:SpringBoot整合netty实现多个客户端与服务器通信的学习&#xff0c;要想通过http在netty客户端之间发送消息&#xff0c;需要实现spring-boot-starter-web&#xff0c;封装消息格式&#xff0c;自动调用netty客户端 2. 封装一个简单…

算法笔记——哈希表篇

一般哈希表都是用来快速判断一个元素是否出现集合里&#xff0c;哈希表并不意味着一定要使用HashMap&#xff0c;有时候使用数组更方便&#xff0c;有时候要使用set&#xff0c;依据具体情况而定&#xff0c;哈希表是典型的空间换时间。 数组作为哈希表 一些应用场景就是为数组…

工具 | 应用程序无法启动,应为应用程序的并行配置不正确

工具 | 应用程序无法启动&#xff0c;应为应用程序的并行配置不正确 “E:\02-Doc\朱老师物联网大讲堂-全部视频\朱有鹏老师嵌入式linux核心课程\开发版光盘资料\X210V3S_A\tools\x210_Fusing_Tool.exe”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.MFC,processorA…

DNS-去中心化域名系统,创建您在DeSoc 社会中的YUAN ID

传统域名系统 (DNS) 是一个分层的分散信息存储&#xff0c;用于将用户在网络浏览器中输入可读名称&#xff08;例如 www.baidu.com&#xff09;解析为IP地址&#xff0c;来访问互联网上的计算机。传统DNS使用一种分布式数据库&#xff0c;有严格的上下级关系&#xff0c;上级仅…

[Android JNI] --- JNIEnv和JavaVM

1 JVMEnv 1.1 JNIEnv 是什么 JNIEnv 即 Java Native Interface Environment&#xff0c;Java 本地编程接口环境。JNIEnv 内部定义了很多函数用于简化我们的 JNI 编程。 JNIEnv是提供JNI Native函数的基础环境&#xff0c;线程相关&#xff0c;不同线程的JNIEnv相互独立&#…

SpringBoot快速回顾(@value读取配置文件)

目录 1.定义配置文件2. 定义Controller类3. 测试4. 优化4.1 封装实体类4.3 定义controller类4.2 测试 本文将介绍如何使用value读取配置文件的内容。 在实际项目中&#xff0c;往往会在配置文件中写项目部署需要配置的环境信息&#xff08;数据库驱动&#xff0c;数据库账号密码…

医疗金融法律大模型:从ChatDoctor到FinBERT/FinGPT/BloombergGPT、ChatLaw/LawGPT_zh

第一部分 各种医疗类ChatGPT&#xff1a;或中英文数据微调LLaMA、或中文数据微调ChatGLM 1.1 基于LLaMA微调的中英文版ChatDoctor 1.1.1 ChatDoctor&#xff1a;通过self-instruct技术提示API的数据和医患对话数据集微调LLaMA Github上有一个基于LLaMA模型的医疗微调模型&am…

zabbix (自定义监控内容-配置邮件报警-自动发现与自动注册)

目录 zabbix 客户端主机配置自定义监控内容设置邮件报警zabbix 自动发现与自动注册zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09;//zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09;zabbix 自动注册&#xff08;对于 agent2 是主动模式&#…

IDEA+springboot+jpa+Layui+Mysql销售考评系统源码

IDEAspringbootjpaLayuiMysql销售考评系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.评分结果3.评分管理4.添加评分5.用户管理6.添加用户7.角色管理8.添加角色8.销售管理9.添加销售 三、部分代码UserDao.javaUserController.javaUser.java 四、其他获取源码 一、…

计算机组成原理实验二:多位逻辑门构建

目录 一、实验目的 二、实验设备 三、实验原理 四、实验内容 1. 16位非门 2.16位与门 3.16位或门 4. 16位复用器 五、实验习题 1.还可以怎样设计各种芯片的物理结构 2.“block copy”&#xff08;块复制&#xff09;和edit菜单中“copy to clipboard”的区别 六、自…

在线OJ项目

1.在线OJ-背景介绍 在线的网页版的编程平台.&#xff0c;打开一个网站,上面就能看到很多的算法题.&#xff0c;在线做题,在线提交.立即就能看到运行结果,是否通过. leetcode 牛客等 一个在线OJ平台,核心功能: 能够管理题目(保存很多的题目信息:题干&#xff0b;测试用例)题…

FPGA软核调试方法

软核工程创建步骤 创建如下工程目录 bin目录&#xff1a;存放SDK工程生成的elf文件(Release编译模式) hdf目录&#xff1a;存放fpga工程师提供的的hdf文件 prj目录&#xff1a;工程目录(包含SDK工程源码) doc目录&#xff1a;文档目录 基于2018.2版本SDK建立工程 打开Xil…