对于函数的学习,先暂停几节,我们把关于变量的一些剩余知识讲一下。
可变变量:
所谓可变变量,就是一个变量的名,又是一个变量。可变变量的语法是php的很特殊的语法——其他语言中少见。在实际应用中不多,楠神简单举个例子,大家了解下。
效果:
怎么理解:
1,凡是$符号出现,就会有可能理解为是一个变量
2,第7行代码,第一个“$”出现了,则php将其解释为一个变量,变量名是$v1;
3,我们有知道,$v1的值是”abc”,
4,那么,第一个“$”符号后面的变量名,就得到为“abc”
5,即:echo 试图输出的是变量$abc, 自然是数字10
实际上,理论上,可变变量的嵌套还可以更多,比如:$$$def;
如果没有特殊的需求,就不推荐大家用可变变量写代码,不易理解,容易出现逻辑问题。
常量:
用于存储一个不会变化也不希望变化的数据的标示符。
常量不再是变量,它像变量一样可以存值,只能是在定义常量的时候存值,后面的代码不能对常量的值修改。
常量命名规则,同变量,但习惯说,常常将常量的名称使用“全大写”形式。
常量有两种定义形式:使用函数define()定义和使用const语法定义
使用define()函数定义:
看示例:
效果:
使用const语法定义:
使用形式: const 常量名 = 常量值;
但const语法只能在“最顶层”的代码域中使用(不能在大括号中)
也即,const语法不能在函数中或条件语句中或其他表示一个“范围”的语句中使用
例如:
会报语法错误:
所以定义一个常量推荐用define函数。
如何使用常量:
最常用的方式直接像变量一样拿“名字”使用。
效果:
还有一种方法,感觉没什么用处,多此一举,就是用函数constant(“常量名”)获取。不做详细介绍了,自己查手册了解吧。
常量被定义以后,不能被修改:
结果会出错:
知道常量的作用了吧,就是定义一个量,这个量只能读,不能被修改。比如说圆周率是3.14,程序员在代码里把3.14写入一个常量里,这样后续的代码需要用到圆周率,直接用常量赋值,可保数据不会被意外修改而出现错误。
常量还有一大作用,就是没有作用域,后续的代码都可以用。
基于上面两点,推荐常量最好在代码最前端定义。
定义形式不同:
使用形式不同:常量无需$符号
可变程度不同:常量的值不可以改变,常量也不可以销毁
作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)
可用类型不同:常量只能存储标量类型:int,float,string,bool
判断的结果为布尔值。
常用形式:if ( defined (某常量名) == false ){ .....这里可以去定义该常量;}
实际上,可以这样:
$result = defined (某常量名); //结果是true或false
使用一个未定义的常量会报一个错误(notice错误)——跟使用一个未定义的变量一样——当然不推荐。
但是:php,此时会得到一个意想不到的结果:似乎该常量存在,并该常量的值就是该名字。
结果:
php语言中,预定了大量的常量,可以直接使用,不用程序员自己去定义了。
其中有些常量,是需要某些模块打开之后才有(比如mysql模块)
比如M_PI(圆周率), PHP_OS(操作系统), PHP_VERSION(php版本号),PHP_INT_MAX(php中的最大的整数值)
参考手册〉附录〉保留字列表〉预定义常量
魔术常量其实是一种值会随着一定的条件(环境)而变化的常量,形式和使用上是常量,但实际上,其值会改变。
比如:__DIR__(当前网页文件的所在目录),__FILE__(当前网页文件),__LINE__(当前这一行)
魔术常量其实类似变量,其值随着不同代码而变化,不区分大小写
参考手册〉语言参考〉常量〉魔术常量
前面第24节,我们就实际用到魔术常量了,用函数dirname(__FILE__)计算出来代码文件所在的一个绝对路径形式的目录地址。
总结:常量和魔术常量是很有实际用处的,程序员应该对常量熟悉掌握。