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去除重复字的实现代码
Sep 16 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP中返回引用类型的方法
Apr 03 PHP
PHP date函数常用时间处理方法
May 11 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 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将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
实例详解Node.js 函数
2018/06/10 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python的requests网络编程包使用教程
2016/07/11 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python实现简单登陆系统
2018/10/18 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
Python timeit模块的使用实践
2020/01/13 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
烹调加工管理制度
2014/02/04 职场文书
李开复演讲稿
2014/05/24 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
2015年中个人总结范文
2015/03/10 职场文书
英文辞职信范文
2015/05/13 职场文书
导游词之阆中古城
2019/12/23 职场文书