PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)


Posted in PHP onSeptember 12, 2014

为什么要谨慎使用PHP中的常量?

Zend Framework文档中写道:常量包含数字字母字符和下划线,数字允许作为常量名。 常量名的所有字母必须大写。类常量必须通过 "const" 定义为类的成员,强烈不鼓励使用 "define" 定义的全局常量。

作为PHP的官方框架,为什么会有这样的要求?

让我们一起分析一下吧。

1. define容易产生意想不到的错误

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

<?php
 define('C', 12345);
 define('C', 123);
?>

这段代码会报个notice错误。带来的后果是:在你定义之前,其它人要是定义了同名的常量,你可能真的不知道里面究竟是什么值。

2. 如何判断PHP常量是否被定义?判断方法易写错

<?php
 define('C', 12345);
 // 错误方法1,经常犯
 if (isset(C)){……}
 // 错误方法2,经常犯
 if (defined(C)){……}
 // 正确方法
 if (defined('C')){……}
?>

3. 执行效率低

<?php
  define('FORUM_THEME',$forum['theme']); 
  $this->display('/'.FORUM_THEME.'@Public:login'); 
  // 系统会从整个执行流程中查找FORUM_THEME
?>

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

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

因此若非要使用常量或者类变量,可使用以下方法:

<?php
 class foo {
  const WEBSITE = "www.zhuyinghao.com";
  protected $_forum_theme;
  function name()
  {
    echo WEBSITE;
    $this->_forum_theme = $forum['theme'];
  }
  function displace() 
  {
    echo $this->_forum_theme;
  }
 }
?>

类名和函数名相同时的作用

在PHP 4中,类的构造函数需要和类名相同,子类的构造函数名与子类名相同,在子类里父类的构造函数不会自动执行。要在子类里执行父类的构造函数,必须执行类似以下语句:

$this->[父类的构造函数名()]

在 PHP 5.0 以上版本里,统一使用construct()作为构造函数,但仍兼容了 4.0 版本的构造函数的定义规则。如果同时定义了4.0的构造函数和 construct()函数,则construct() 函数优先。

用PHP EOL来替换/r/n进行换行

写程序时会经常用到换行,用PHP内置常量PHP_EOL来进行换行。

一个小小的换行,在不同的平台有着不同的实现。在unix世界换行就用\n来代替,但是windows为了体现他的不同,就用\r\n,更有意思的是在mac中用\r。因此unix系列用 \n,windows系列用 \r\n,mac用 \r。

因此系统会根据平台系统的不同,转换成不同的换行。如果要在浏览器中换行,就要使用PHP_EOL变量进行换行

PHP 相关文章推荐
PHP编程与应用
Oct 09 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
更改localhost为其他名字的方法
Feb 10 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
php修改指定文件后缀的方法
Sep 11 #PHP
MyEclipse常用配置图文教程
Sep 11 #PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 #PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 #PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 #PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 #PHP
php生成随机数的三种方法
Sep 10 #PHP
You might like
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python实现购物车程序
2018/04/16 Python
python判断数字是否是超级素数幂
2018/09/27 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
June Jacobs尊积帕官网:知名的spa水疗护肤品牌
2019/03/21 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
应届医学毕业生求职信分享
2013/12/02 职场文书
环保倡议书400字
2014/05/15 职场文书
教师考核材料
2014/05/21 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
产品质量保证书范本
2015/02/27 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
怎样写观后感
2015/06/19 职场文书
民主生活会主持词
2015/07/01 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python