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

常量

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 将产生一个警告。(可以使用@忽略警告)

示例如下,

<?phpdefine('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是不同的。
<?phpdefine("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.hqwc.cn/news/15953.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK实验部署过程

ELK集群部署环境准备 配置ELK日志分析系统 192.168.1.51 elk-node1 es、logstash、kibana 192.168.1.52 elk-node2 es、logstash 192.168.1.53 apache logstash &#xff08;我这里是把虚拟机的配置全部都改为2核3G的&#xff09; 2台linux 第1台&#xff1a;elk-nod…

【Vivado那些事儿】动态时钟的使用

时钟是每个 FPGA 设计的核心。如果我们正确地设计时钟架构、没有 CDC 问题并正确进行约束设计&#xff0c;就可以减少与工具斗争的时间。 但对于某些应用&#xff0c;我们希望能够更改某些IP中的时钟频率。其中一个例子是在图像处理管道中&#xff0c;输出分辨率可以动态变化&a…

PADS Layout中显示与布线标签页参数设置

1.“显示”标签页如图1 所示&#xff1a; 图1 显示标签页 显示标签页是用于去设置网络名以及管脚编号的字体大小的设置&#xff0c;建议是可以采取默认设置的&#xff0c;如果自己设计有另外要求&#xff0c;也是可以去进行设置。 2.“布线”标签也有三个子标签&#xff0c;首先…

【Python】使用pycharm结合gradio做一个web页面的demo

紧接上文我们安装好了python3.10&#xff0c;现在需要下载它的开发工具pycharm&#xff0c;我们在这里不过多赘述具体细节&#xff0c;仅简要说明关键步骤&#xff0c;来通过gradio体验一下示例demo 一、下载IDE pycharm官网&#xff1a;https://www.jetbrains.com.cn/pycharm…

选择排序、归并排序、快速排序

1.选择排序 选择排序算法的实现思路有点类似插入排序&#xff0c;也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素&#xff0c;将其放到已排序区间的末尾。 Java代码实现如下。 ps&#xff1a;选择排序的最好情况时间复杂度、最坏情况和平均情况…

PAX-DV-D24-1带升压双比例阀放大器

驱动比例流量阀、比例压力阀及泵、双比例控制阀&#xff1b; 双通道相互独立&#xff0c;PWM输出&#xff0c;发热小; 电流负反馈恒流输出&#xff0c;精密采样&#xff0c;温度漂移小于0.5%; 内部可选带升压&#xff0c;满足大阻抗线圈输出; 重复精度高&#xff0c;线性度…

Debezium系列之:基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库

Debezium系列之&#xff1a;基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库 一、背景二、技术路线三、配置四、从mysql同步数据到Elasticsearch和PostgreSQL数据库五、总结 一、背景 基于 Debezium 的端到端数据流用例&#xff0c;将数据流式传…

SpringMVC 中的视图如何渲染模型数据

SpringMVC 中的视图如何渲染模型数据 SpringMVC 是一个基于 Spring 框架的 Web 框架&#xff0c;它提供了一种方便的方式来处理 HTTP 请求和响应。在 SpringMVC 中&#xff0c;视图是用来渲染模型数据的组件&#xff0c;它们负责将模型数据转换为 HTML、JSON、XML 等格式的响应…

Flink DataStream之Union合并流

新建类 package test01;import jdk.nashorn.internal.runtime.regexp.joni.Config; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.datastream.DataStream; import o…

UNION 和 UNION ALL 用法及区别

UNION UNION 是一个用于合并多个 SELECT 查询结果的操作符。它的作用是将多个查询的结果集合并为一个结果集&#xff0c;并去除重复的行。 主要特点和作用如下&#xff1a; 合并结果集&#xff1a;UNION 操作符可以将多个查询的结果集合并为一个结果集。每个查询的结果集必须…

使用Llama.cpp在CPU上快速的运行LLM

大型语言模型(llm)正变得越来越流行&#xff0c;但是它需要很多的资源&#xff0c;尤其时GPU。在这篇文章中&#xff0c;我们将介绍如何使用Python中的llama.cpp库在高性能的cpu上运行llm。 大型语言模型(llm)正变得越来越流行&#xff0c;但是它们的运行在计算上是非常消耗资源…

干了4年外包,技术落后得明显,感觉要被行业优化了

先说一下自己的情况。大专生&#xff0c;19年通过校招进入深圳某软件公司&#xff0c;干了接近4年的测试&#xff0c;今年年中旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了4年&#xff0c;…