php类const类成员变量初始化,php中const与define的使用区别 详解 1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,...

php中const与define的使用区别 详解

79e051fc05a5908fd478a19f3ff71a98.png

1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。

2、define不能在类中定义而const可以。

3、const不能在条件语句中定义常量

if (...) {

const FOO = 'BAR';    // invalid

}

but

if (...) {

define('FOO', 'BAR'); // valid

}

4、const采用一个普通的常量名称,define可以采用表达式作为名称。

const  FOO = 'BAR';

for ($i = 0; $i < 32; ++$i) {

define('BIT_' . $i, 1 << $i);

}

5、const只能接受静态的标量,而define可以采用任何表达式。

const BIT_5 = 1 << 5;    // invalid

but

define('BIT_5', 1 << 5); // valid

6、const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量

define('FOO', 'BAR', true);  www.2cto.com

echo FOO; // BAR

echo foo; // BAR

总结:

使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。

PHP常量有自身的特点,在实际中能少用就少用。

1、PHP常量是定义后就不能修改和再次赋值。但是如果再次赋值会怎么样?

?>

这段代码只会报个notice错误。

带来的后果是:在你定义之前,其它人要是定义了同名的常量,你可能真的不知道里面究竟是什么值。

补救方法:

使用定义常量之前要使用definde()来确认一下常量是否已经定义过。

实际上,这是PHP处理错误过于宽泛,如果程序报Fatal并停止程序执行就可以避免这个问题。

2、如果判断PHP常量是否被定义?

define('a', 12345);

// 错误方法1,经常犯

if (isset(a)){……}

// 错误方法2,经常犯

if (defined(a)){……}

// 正确方法,不知道几个人能写对

if (defined('a')){……}

?>

3、使用不方便,容易混淆,效率低

// 再未定义前,直接作为字母使用

echo "这是常量a".a;// 显示:这是常量aa

define('a', 12345);

// 不能放在""内来使用,只能放在""外

echo "这是常量a".a;// 显示:这是常量a12345

?>

因为php处理常量的时候要进行多次查找,所以效率低。

4、一个经典的错误,数组中key为常量的问题

$t = array('a'=>'a','b'=>'b','c'=>'c');

// 得到key为a的值

echo $t['a'];

// 错误!虽然,也可以得到key为a的值,是因为php找不到常量a所以将a做为字符串返回,导致大家将错就错的使用。

echo $t[a];

define('a', 'c');

// 正确,注意:得到key为c的值

echo $t[a];

?>

PHP常量的问题,在于PHP处理常量的方法过于宽松导致的,如果能够严格一些,就会避免很多的问题。在实际过程,能用变量就不要用常量,因为变量的效率高使用更加方便。

本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1567087,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值