什么是常量?
- 值一旦定义, 就不可以改变的量
如何定义常量?
- 使用define函数
define("GREETING", "Welcome to yunhe!");
echo GREETING;
- 注意, 常量一旦声明, 不可改变值
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
define("GREETING", "Welcome to yunhe!");
echo GREETING;
常量和变量的区别
试着解释, 常量和变量都有哪些区别, 请举例说明...
定义形式不同;
- 常量使用define或者const, 变量使用$符号
使用形式不同(常量不需要 $ 符号);
- 常量可以直接使用, 变量需要使用$符号
可变程度不同(常量的值不可改变或者销毁);
- 常量不可变, 变量的值可变
作用范围不同(常量具有超全局作用域(函数内外都可直接使用));
- 常量函数内外都可以使用, 变量
函数外的变量, 函数内不能用, 函数内的变量, 函数外不能用
可用类型不同(常量只能存储标量类型:int,float,string,bool; 和数组)
- 变量有8中数据类型, 常量支持5种, 4个标量加上数组
常量的分类
- 系统常量
- 自定义常量
- 魔术常量
系统常量
- php自带的常量
PHP_VERSION, 查看PHP版本
echo PHP_VERSION; // 7.3.6
试举例说明, 系统常量都有哪些, 值是多少?(5个即可)
PHP_VERSION当前使用的PHP版本号PHP_OS当前PHP环境的运行操作系统TRUE与true一样FALSE与false一样M_PI圆周率常量值M_E科学常数eM_LOG2E代表log2e,以2为底e的对数M_LOG10E代表lge,以10为底e的对数M_LN22的自然对数M_LN1010的自然对数E_ERROR最近的错误之处E_WARNING最近的警告之处E_PARSE剖析语法有潜在问题之处METHOD表示类方法名,比如B::test
自定义常量
- 用户自己定义的常量
- 可以使用
define,也可以使用const - 使用define的方法
define("GREETING", "Welcome to yunhe!");
echo GREETING;
- 使用const的方法
- 显示常量值, 有两种方式
const HELLO = "hello world";
echo HELLO;
echo constant('HELLO');
-
常量区分大小写吗?
-
既然常量值一经定义, 不能改变, 那我怎么知道以前有没有声明过...
-
defined函数可以判断是否声明过常量
const HELLO = "hello world";
var_dump(defined('HELLO'));
var_dump(defined('WORLD'));
魔术常量
- 值会根据环境和上下文发生改变的量, 就像变魔术...
echo __LINE__;
试举例说明, 魔术常量都有哪些, 值是多少?(5个即可)
| 常量名称 | 含义 |
|---|---|
__LINE__ |
文件中的当前行号。 |
__FILE__ |
文件的完整路径和文件名。 |
__DIR__ |
文件所在的目录 |
__FUNCTION__ |
函数名称 |
__CLASS__ |
类的名称 |
__TRAIT__ |
Trait 的名字 |
__METHOD__ |
类的方法名 |
__NAMESPACE__ |
当前命名空间的名称 |
小练习
单选题
下列定义常量的方法错误的是()(选择一项)
A define('YUNHE','PHP');
B define('_A','a');
C define('$a','$a');
D define('yunhe','php');
多选题
下列选项中,关于系统常量解释正确的是()(选择三项)
A PHP_OS PHP的运行系统
B E_ERROR 最近的错误之处
C PHP_VERSION PHP的版本
D define(‘TEST’,’hello’); 定义常量TEST
如何查看已经定义的常量?
get_defined_constants()返回的是包含系统常量和自定义常量的数组
print_r(get_defined_constants())
print_r和var_dump的区别
试举例说明, print_r和var_dump的区别
常量总结

小练习
多选题
关于常量的定义方式正确的是()(选择两项)
A const('TEST','test');
B define('TEST','test');
C const TEST='test';
D define test='test';
多选题
常量区分大小写,在脚本define_con.php中定义常量const NAME= 'yunhe',下列说法正确的是()(选择两项)
A defined(‘NAME’) 返回true
B 在题示脚本中重新定义常量:const NAME=’http://yunhe’;echo NAME;浏览器中输出值为 ‘yunhe’
C constanted(‘NAME’) 该函数可以检测NAME常量是否定义
D echo name; 输出结果为‘yunhe'
单选题
以下选项中,说法错误的是()(选择一项)
A __FILE__ 得到当前文件的完整绝对路径和文件名
B __METHOD__ 得到当前数据提交的方法名
C __FUNCTION__ 得到当前函数名称
D __CLASS__ 得到当前类的类名
单选题
下列选项中,哪一项的结果可能为“\phpStudy\WWW\myfiles”()(选择一项)
A __DIR__
B __FILE__
C __LINE__
D __CLASS__