解析php中static,const与define的使用区别


Posted in PHP onJune 18, 2013

define部分:
宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。)
宏的语法为:
#define 宏名称 宏值
作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母。
利用宏的优点:
1)让代码更简洁明了
当然,这有赖于你为宏取一个适当的名字。一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点。
2)方便代码维护
对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换,这个过程有点你我在文字处理软件中的查找替换。所以在代码中使用宏表达常数,归根结底还是使用了立即数,并没有明确指定这个量的类型。

const部分
常量定义的格式为:
const 数据类型 常量名 = 常量值;
而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查。常量必须一开始就指定一个值,然后,在以后的代码中,我们不允许改变此常量的值。

两者之间的区别:
内存空间的分配上。define进行宏定义的时候,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型,语句结构等,即宏定义常量只是纯粹的置放关系,如#define null 0;编译器在遇到null时总是用0代替null它没有数据类型(还有疑问请找C语言书籍看预处理部分或者看MSDN.而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查,所以const与define之间的区别在于const定义常量排除了程序之间的不安全性. define定义全局常量,在任何地方都可以访问

const用于类成员变量定义,只能用类名访问不能更改要是初学这样显理解着就行别太钻牛角尖就行 PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想。我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助。

(1) staticstatic关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用this会出错。

(2)constconst是一个定义常量的关键字,类似于C中的#define,能够定义一个常量,如果在程序中改变了它的值,那么会出现错误。举例说明上面的代码:

<?php 
class Counter 
{ 
private static $count = 0;//定义一个静态属性 
const VERSION = 2.0;//定义一个常量 
//构造函数 
function __construct() 
{ 
self::$count++; 
} 
//析构函数 
function __destruct() 
{ 
self::$count--; 
} 
//定义一个静态的方法 
static function getCount() 
{ 
return self::$count; 
} 
} 
//创建一个实例 
$c = new Counter(); 
//执行打印 
print( Counter::getCount(). "<br>\n" ); //使用直接输入类名来访问静态方法Counter::getCount 
//打印类的版本 
print( "Version useed: " .Counter::VERSION. "<br>\n" ); 
?>

PHP 相关文章推荐
PHP中的正规表达式(一)
Oct 09 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
mongodb和php的用法详解
Mar 25 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
php 原生分页
Apr 01 PHP
解析htaccess伪静态的规则
Jun 18 #PHP
解析php中const与define的应用区别
Jun 18 #PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 #PHP
解析php中memcache的应用
Jun 18 #PHP
PHP实现的封装验证码类详解
Jun 18 #PHP
php empty()与isset()区别的详细介绍
Jun 17 #PHP
php include和require的区别深入解析
Jun 17 #PHP
You might like
农民C键的运用技巧
2020/03/04 星际争霸
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
对Python3中的input函数详解
2018/04/22 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
如何基于python操作excel并获取内容
2019/12/24 Python
python3注册全局热键的实现
2020/03/22 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
python中加背景音乐如何操作
2020/07/19 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
中学生打架检讨书
2014/02/10 职场文书
法人代表任命书范本
2014/06/05 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
新学期开学标语
2014/06/30 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书