ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
``` const 类常量(php5.3引入) 类内调用常量属性:self::常量名 // 类外获取类中的常量属性类名::常量名; const是常量 值不能修改了 static是[静态成员](https://www.baidu.com/s?wd=%E9%9D%99%E6%80%81%E6%88%90%E5%91%98&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBnWRYPHF-PvFWuWbdrH7h0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHcdP10srHn1)可以在不实例化得情况下 在类外直接访问 CONST不行 /*  const:定义常量  define('HOST', 'localhost'); */ define('HOST', 'localhost'); echo HOST; // 使用const定义常量 const USER = 'root'; echo USER; class person{     const SS='aa';     //self::SS;   这行报错:得出self调用自身的常量必需放在方法里     public function demo(){         echo '调用自身的常量'.self::SS;     } } echo person::SS;//输出aa  没有实例化在外部能调用常量 $obj=new person; $obj->demo();             类的内部调用常量需要实例化才行 类常量可以被子类继承,覆盖(修改值) class Model {      // const可以在类内部定义常量属性      const PASS = '';      public function \_\_construct()      {           // 类内调用常量属性:self::常量名           mysql\_connect(HOST,USER,self::PASS) or die('链接失败');           echo '链接成功';      } } // 实例化Model类 $m = new Model(); // 类外获取类中的常量属性 echo Model::PASS; ``` **获取常量值的另一种方法** constant(string`$name`) :mixed 返回类常量的值 当你不知道常量名,却需要获取常量的值时,**constant()**就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。 ``` define("MAXSIZE", 100); echo MAXSIZE; echo constant("MAXSIZE"); // same thing as the previous line interface bar { const test = 'foobar!'; } class foo { const test = 'foobar!'; } //将常量名定义在变量里 $const = 'test'; var_dump(constant('bar::'. $const)); // string(7) "foobar!" var_dump(constant('foo::'. $const)); // string(7) "foobar!" ``` **在php中定义常量时,const和define的区别?** 使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。根本区别在于const会在代码编译时定义一个常量,而define则是在代码运行时才定义一个常量,因为const在编译时就被执行了,所以它在速度上要比define快得多。尤其是在使用define定义大量常量时,PHP的运行速度会变得非常慢。人们甚至发明了诸如apc_load_constantshide来避免这个问题 1、都可以可用于全局常量。 ``` const FOO = 'BAR';//php5.3+ define('FOO','BAR'); ``` 2、const可在类中使用,一经定义,不可修改define则不能 ``` class Foo { const BAR = 2; // 有效 } class Baz { define('QUX', 2); // 无效 } ``` 3、不能在函数内,循环内以及条件语句(if,三元,&&,||,switch)之内用*const*来定义常量 ``` if (...) { const FOO = 'BAR'; // 无效的 } //对检测常量是否定义,未定义则定义很用用,const无法做到 if (!defined('FOO')) { define('FOO', 'BAR'); // 有效的 } ``` 4、php5.6之前const不能接受表达式 ``` const BIT_5 = 1 << 5; // 在PHP5.6之后有效,之前无效 define('BIT_5', 1 << 5); // 一直有效 ``` 5、const定义的常量是大小写敏感的,但是define允许你将其第三个参数设置为true来关闭其对大小写的敏感(不推荐): php7.3将废弃大小写不敏感的常量,将 TRUE 作为第三个参数传递给 define() 会导致一个废弃警告 ``` define('FOO', 'BAR', true); //php7.3会抛出警告哦 echo FOO; // BAR echo foo; // BAR ``` 6、const默认在当前的namespace下定义常量,而使用define则需要你写明整个namespace的完整路径: ``` namespace A\B\C; // 如果要定义常量 A\B\C\FOO: const FOO = 'BAR'; define('A\B\C\FOO', 'BAR'); ``` 6、自从PHP5.6后,使用const数组也能被定义为常量。而define目前是不支持这一功能的,但是该功能会在PHP7中被实现: ``` const FOO = [1, 2, 3]; // 在PHP 5.6中有效 define('FOO', [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效 ``` 总结:除非你需要使用表达式或者在条件语句中定义常量,不然的话仅仅是为了代码的简单可读性你都最好要使用const!