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加密解密的代码
Jul 16 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php 使用array函数实现分页
Feb 13 PHP
PHP模板解析类实例
Jul 09 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 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下读取文本文件的代码
2008/07/02 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
2017/05/12 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
房地产开盘策划方案
2014/02/10 职场文书
企业宣传口号
2014/06/12 职场文书
食品工程专业求职信
2014/06/15 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书