应用 IT 技术
解决实际问题

PHP中定义常量的两种方式(const与define)及其区别

常量是一个简单值的标识符(名字),如同其名称所暗示的,在脚本执行期间该值不能改变(除了魔术常量,它们其实不是常量)。常量标识符默认为大小写敏感,按照约定俗成其标识符通常使用全大写。常量标识符前不加 $ 符号。

常量只能包含标量数据(integer、float、string 和 boolean)。可以定义 resource 常量,但应尽量避免,因为会造成不可预料的结果。

PHP 中有两种定义常量的方式:一种是使用 const,另一种是使用 define 。

示例1(const):

<?php
  const CON1=3;
  const CON2=3.14;
  const CON3='This is a const.';
  const CON4=false;
  echo CON1.'<br/>';  //3
  echo CON2.'<br/>';  //3.14
  echo CON3.'<br/>';  //This is a const.
  var_dump(CON4);     //boolean(false)
?>

示例2(define):

<?php
  define('CON1',3);
  define('CON2',3.14);
  define('CON3','This is a const.');
  define('CON4',false);
  echo CON1.'<br/>';  //3
  echo CON2.'<br/>';  //3.14
  echo CON3.'<br/>';  //This is a const.
  var_dump(CON4);     //boolean(false)
?>

需要注意的一点是:常量一经定义,不能被修改,也不能被删除。

示例3:

<?php
  const CON1=3.14;
  const CON1=3.1;
  echo CON1.'<br/>';  //3.14
  define('CON1',3);
  echo CON1.'<br/>';  //3.14
  
  define('CON2','test');
  define('CON2','tes');
  echo CON2.'<br/>';  //test
  const CON2='te';
  echo CON2;          //test
?>

const 是一个语言结构,简单易读;而 define 是一个函数,使用上更灵活多变。而这两种定义常量的方式的主要区别也是围绕该点产生的——

1. define 可以通过第三个参数来指定是否区分大小写,true 表示大小写不敏感,默认为 false;const 不能。

示例4:

<?php
  define('CON',3.14,true);
  echo CON.'<br/>';  //3.14
  echo con;          //3.14
?>

2. define 定义的常量名与常量中可以有表达式;const 不能。

示例5:

<?php
  for($i=1;$i<4;$i++){
    define('CON_'.$i,$i+1);
  }
  echo 'CON_1 = '.CON_1.'<br/>';  //CON_1 = 2
  echo 'CON_2 = '.CON_2.'<br/>';  //CON_2 = 3
  echo 'CON_3 = '.CON_3;          //CON_3 = 4
?>

3. define 可在其它函数、循环及 if 条件等中使用;const 是在编译时定义,因而不能。

示例6:

<?php
  if(true){
    define('CON1','test');  //test
  }
  
  if(true){
    const CON2='test';      // 出错
  }
?>

4. const 可用于类常量的定义;define 不能。

示例7:

<?php
  class Test1{
	const CON='con1';
	static function get_const1(){
	  return self::CON;	
	}
	function get_const2(){
	  return self::CON;	
	}
  }
  echo Test1::CON.'<br/>';           //con1
  $test1='Test1';
  echo $test1::CON.'<br/>';          //con1
  echo Test1::get_const1().'<br/>';  //con1
  $obj=new Test1;
  echo $obj->get_const1().'<br/>';   //con1
  echo $obj->get_const2().'<br/>';   //con1
  
  class Test2 extends Test1{
	const CON='con2'; 
	static function get_const1(){
	  return self::CON;	
	}
	static function get_parent_const(){
	  return parent::CON;	
	}
  }
  echo Test2::CON.'<br/>';           //con2
  echo Test2::get_const1().'<br/>';  //con2
  echo Test2::get_parent_const();    //con1
?>

5. const 比 define 快很多。

未经允许不得转载:酷睿N核博客 » PHP中定义常量的两种方式(const与define)及其区别
支付宝打赏微信打赏

如果文章对您有所帮助,欢迎移至上方按钮打赏作者

分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址