发现一个const使用的问题,场景是这样的,外包公司,之前给建行开发一个对外的sdk,在对接过程中,SDK出现各种各样的问题,这里主要介绍常量配置方面的
1.框架的冲突
define定义常量,会和框架中使用的同名常量存在冲突,因为框架中首先会使用define定义,造成加载到SDK时,会报重复定义,使用了const定义解决了此问题,因为define定义不会考虑命名空间,const会,define是全局定义,而const在定义时就带上了当前命名空间
2.版本出现的
const在php5.3时提供了支持,在SDK修改成const没有做多版本测试,后面对接就出现了问题,在一个公司使用php5.4版本,总是报语法错了,这真的很头大,因为仔细检查了很多遍,例如这样:
const CONF_PATH=__DIR__.DIRECTORY_SEPARATOR;
可以确定的是语法肯定是不存在错误的,然后对接方说对接其他的SDK中也使用了const定义常量,那更确定了const可以在此版本的使用。
既然不是const的报错,又报语法错误,语法错误出现在__DIR__后面这个“.”,报错说,在“.”希望出现一个“,”或者“;”。
然后我就想是否不支持拼接语法,因为const在官方文档中的描述是定义后不可修改,那在5.4的版本中是否认定,在__DIR__后就已经是常量定义完成了,后面的拼接就算是修改了,然后和对接方做了一个测试,事实就是这样。
吸取教训,后面还是要做多个版本的测试,这样才能去确保万无一失。