文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-26 10:22

关注

常量

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

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

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

设置 PHP 常量

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

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

该函数有三个参数:

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

示例如下,

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

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

常量是全局的

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

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

define("PHP", "PHP是世界上最好的语言");function myTest() {    echo PHP;}myTest();    // 输出PHP是世界上最好的语言?>

在这里插入图片描述

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

在这里插入图片描述

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

可变变量(魔术变量)

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

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

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

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

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

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

可变变量的作用

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

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

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

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

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

可变变量之于数组

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

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

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

来源地址:https://blog.csdn.net/weixin_44368963/article/details/131565014

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯