php内部常量_PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
为什么要谨慎使用PHP中的常量?
Zend Framework文档中写道:常量包含数字字母字符和下划线,数字允许作为常量名。 常量名的所有字母必须大写。类常量必须通过 "const" 定义为类的成员,强烈不鼓励使用 "define" 定义的全局常量。
作为PHP的官方框架,为什么会有这样的要求?
让我们一起分析一下吧。
1. define容易产生意想不到的错误
PHP常量是定义后就不能修改和再次赋值。但是如果再次赋值会怎么样?
define('C', 12345);
define('C', 123);
?>
这段代码会报个notice错误。带来的后果是:在你定义之前,其它人要是定义了同名的常量,你可能真的不知道里面究竟是什么值。
2. 如何判断PHP常量是否被定义?判断方法易写错
define('C', 12345);
// 错误方法1,经常犯
if (isset(C)){……}
// 错误方法2,经常犯
if (defined(C)){……}
// 正确方法
if (defined('C')){……}
?>
3. 执行效率低
define('FORUM_THEME',$forum['theme']);
$this->display('/'.FORUM_THEME.'@Public:login');
// 系统会从整个执行流程中查找FORUM_THEME
?>
因为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常量使用的几个需要注意的地方(谨慎使用PHP中的常量)相关推荐
- php中预定义常量的,php预定义常量_PHP教程
php预定义常量_PHP教程 这些常量在 PHP 的内核中定义.它包含 PHP.Zend 引擎和 SAPI 模块. PHP_VERSION (string) PHP_OS (string) PHP_E ...
- php如何定义和使用常量,PHP中如何定义和使用常量_PHP教程
1.自定义常量 * 必须用函数define()定义 * 定义完后其值不能再改变了 * 使用时直接用常量名,不能像变量一样在前面加$s 例如:define("PI",3.14);定义 ...
- c语言中 字符串常量的界定符,C字符串操作函数
1.7. 分割字符串 很多文件格式或协议格式中会规定一些分隔符或者叫界定符(Delimiter),例如/etc/passwd文件中保存着系统的帐号信息:$ cat /etc/passwd root:x ...
- java 定义一组常量用什么最好_Java语言中定义常量注意事项解析
一.常量定义的基本注意事项. 在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来定义常量.当常量被设定后,一般情况下就不允许再进行更改.如可以利用如下的形式来定 ...
- 11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))
11.JDK8内存模型 11.1.本地方法栈(Native Method Stacks) 11.2.虚拟机栈(Java Virtual Machine Stacks) 11.3.栈帧结构 11.3.1 ...
- python的常量和变量_python中的常量和变量代码详解
局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...
- JavaScript中的常量:什么时候使用它,有必要吗?
本文翻译自:Const in JavaScript: when to use it and is it necessary? I've recently come across the const k ...
- Objective-C中的常量
我正在开发一个Cocoa应用程序,并且我使用常量NSString作为存储我的首选项的键名的方法. 我知道这是一个好主意,因为它可以在必要时轻松更改密钥. 此外,它是整个'将您的数据与逻辑分离'的概念. ...
- 好好说说Java中的常量池之Class常量池
前言 在Java中,常量池的概念想必很多人都听说过.这也是面试中比较常考的题目之一.在Java有关的面试题中,一般习惯通过String的有关问题来考察面试者对于常量池的知识的理解,几道简单的Strin ...
最新文章
- Windows server 2008普通用户不能远程登录问题
- VB无所不能之五:建立“标准”DLL动态链接库文件(1)
- 怎么写显示商品图片_shopee商品描述怎么写,shopee商品排名靠前的是
- 公益性岗位计算机考试内容,公益性岗位公共基础知识:计算机概述-计算机硬件系统(1)...
- 2.数据湖DeltaLake之DDL操作
- 批处理中for的参数的用法
- android单片机wifi通信原理,基于单片机计算机之间无线通信实现.doc
- 如何在MySQL中缩小/清除ibdata1文件
- axure下载及汉化
- linux运行asm文件,linux – 尝试在Ubuntu上的NASM上运行.asm文件时出错
- 软件工程~数据字典例子解释
- 表格用计算机做成横版的WPS,WPS表格怎么将表格横过来图文教程
- XJOI1131换零钱
- 成功架构设计的关键要素
- 干货 | 携程平台化常态化数据治理之路
- WinForm自定义分页控件实现Datagridview分页效果附引用Demo
- Android学习笔记:实现app启动界面跳过倒计时功能
- 计算机如何连接iphone,iphone怎么连接到电脑的方法详解【图文】
- 浅析中国汽车融资租赁行业
- 【计算机毕业设计】029网上购物商城系统
热门文章
- python开发web运维工具_Python web 开发工具箱
- 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)-(奇偶校验码、CRC循环冗余码、海明码)
- 2.2.3 C语言中的整数类型及类型转换(为什么强制类型转换值发生改变?带你从机器码的角度分析)
- java 同步块 抛出异常_java问题合集(一)
- 概要设计说明书案例_逆向前行,趁势而为外贸学院线上教学优秀案例展(七)...
- 酷狗音乐怎样复制歌词到计算机,酷狗怎么复制歌词和歌曲到mp3上
- Linux进程间通信——使用共享内存
- C/Cpp / C++ 构造函数和析构函数可以是虚函数吗
- 对uC/OS-II内二维指针的研究
- KEIL、uVision 和 MDK 区别和联系