常量
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是世界上最好的语言
?>
常量与变量细节
- 常量和(全局)变量在不同的名字空间中。这意味着例如 HELLO 和 $HELLO是不同的。
<?php
define("HELLO", "PHP是世界上最好的语言");
$HELLO='hello world!!!';
echo HELLO;
echo "<br/>";
echo $HELLO;
?>
- 常量和变量不同,常量只能包含标量数据(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];
?>
输出如下