总结
- 运行时间:在于
const
会在代码编译时定义一个常量,而define
则是在代码运行时才定义一个常量 函数内外:const
不能在函数内使用,可以作为类静态属性;define可以在函数内也可以在函数外使用,不能作为类属性,- 大小写的:define可以把第三个参数设置为true,设置为对大小写不敏感 const不行
- 名字变化:define的名名名称可以变化,const的不可以变化
- 变量的用:const不能使用变量,default可以使用变量
- 直接数组:const与define都可以直接定义数组
- 类内使用:const可以在class与interface中使用,把他视为静态属性,同静态的获取设置方法一样,define不得行!!!
- 速度比较:const快些 define慢些
代码
<?php
//define可以正常的使用
//string(4) "aaaa"
if(1){
define("aaaa","aaaa");
var_dump(aaaa);
}
// if(1){
// // 不期望的const 说明不能再里面使用const
// // Parse error: syntax error, unexpected 'const' (T_CONST) in
// // D:\phpstudy\PHPTutorial\WWW\PHPCollection\PHP常量\1.const.php on line 9
// const aaaa="aaaa";
// var_dump(aaaa);
// }
class aaaa{
const ddd="2222";
//这个是错误的!!!!
// define("rrrrr","ddddd");
public function aaa(){
// const aasssa="aaasssss";
// var_dump(aasssa);
define("rrrrr","我是define的哈哈哈哈哈ddddd");
var_dump(rrrrr);
}
}
//方法一:在类里面常量被视作静态属性
$a=aaaa::ddd;
// $a=aaaa::ddddddd;
echo "<br>";
var_dump($a);
echo "<br>";
//方法二:
$fff=new aaaa();
const ddd="这个是自己定义的常量eeeee";
@var_dump(ddd);
echo "<br>";
$fff->aaa();
// $aaasssss=$fff->aaa();
// var_dump($aaasssss);
const BIT_5 = 1 << 5;// 在PHP5.6之后有效,之前无效
define('BIT_6', 1 << 5); // 一直有效
echo "<br>";
echo "11111111111111111111111111";
var_dump(BIT_5);
var_dump(BIT_6);
<?php
const BIT_5 = 5>1?"aaa":"bbbb";
define('BIT_6', 5>1?"vvv":"gggg");
var_dump(BIT_5);
echo "<br>";
var_dump(BIT_6);
<?php
define("aaa","bbb",true);
var_dump(aaa);
var_dump(AAA);
<?php
// array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) }
const aaa=[1,2,3,4,5,6];
var_dump(aaa);
echo "<br>";
// array(5) { [0]=> int(1) [1]=> int(34) [2]=> int(666) [3]=> int(666) [4]=> int(8888) }
define('bbb',[1,34,666,666,8888]);
var_dump(bbb);
echo "<br>";
$t=[1,34,666,666,8888];
define('eee',$t);
var_dump(eee);