一:常量定义
1:在脚本执行期间该值不能改变(除了所谓的,它们其实不是常量)
2:常量默认为大小写敏感
3:命名规则:用正则表达式是这样表达的:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
在这里,字母指的是 a-z,A-Z,以及从 127 到 255(0x7f-0xff)的 ASCII 字符。
4:
如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 "CONSTANT")。此时将发出一个 级的错误。参见手册中为什么 是错误的(除非事先用 将 bar 定义为一个常量)。如果只想检查是否定义了某常量,用 函数。
settings.php test.php
If for some reason settings.php doesn't get included and the DEBUG constant is not set, PHP will STILL print the sensitive data. The solution is to evaluate it. Like so:
settings.php test.php
5:heredoc中的常量不能被解释,如果需要调用,可以把常量封装到一个函数里,返回调用
There is a way to access a constant in heredoc.Here is the example:
6:It is perfectly valid to use a built-in PHP keyword as a constant name - as long as you the constant() function to retrieve it later:
define('echo', 'My constant value');echo constant('echo'); // outputs 'My constant value'
7:动态的常量可以用返回
8:常量和(全局)变量在不同的名字空间中。这意味着例如 TRUE
和 $TRUE 是不同的。
二:魔术常量(8个)
__FUNCTION__; __FILE__; __LINE__; __NAMESPACE__; __TRAIT__; __CLASS__; __METHOD__; __DIR__;
二:类常量const
1:接口(interface)中也可以定义常量
2:从php5.6开始常量可以用标量表单式了
3:类常量可以被覆盖
it's possible to declare constant in base class, and override it in child, and access to correct value of the const from the static method is possible by 'get_called_class' method:
abstract class dbObject{ const TABLE_NAME='undefined'; public static function GetAll() { $c = get_called_class(); return "SELECT * FROM `".$c::TABLE_NAME."`"; } }class dbPerson extends dbObject{ const TABLE_NAME='persons';}class dbAdmin extends dbPerson{ const TABLE_NAME='admins';}echo dbPerson::GetAll()."";//output: "SELECT * FROM `persons`"echo dbAdmin::GetAll()."";//output: "SELECT * FROM `admins`"
二:const和define定义常量的区别
1:和使用 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 语句之内用 const 来定义常量。
2:类常量中不能有变量,define中可以用
The const keyword will not allow anything that may have to be "processed":$color = "red";const RED = "This is the color $color"; //Doesn't workdefine(strtoupper($color), "This is the color $color") // Works fine