[PHP从小白到大牛]-008 PHP常量

644 阅读2分钟

什么是常量?

  • 值一旦定义, 就不可以改变的量

如何定义常量?

  • 使用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科学常数e
  • M_LOG2E代表log2
  • e,以2为底e的对数
  • M_LOG10E代表lg
  • e,以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_rvar_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__