php5.3以后不支持类名做构造方法,命名空间 加自动引入无法触发类名构造方法
2015-01-20 00:02
609 查看
今天写代码遇到了一个诡异的问题,搞了好久才发现居然是命名空间造成的。
php版本 5.6.3
起因
项目用了命名空间,通过命名空间 设置 spl_autoload_register (自动引入) 来加载类。但是加载了一个解密类时不管怎么调试 都无法解密出数据。
分析
尝试了很多次,一开始以为是框架问题。因为把加密类单独拿出来做测试时可以得到解密的字符串的。后来分析了半天 不是框架的问题。而是解密类太古老了 还是用的类名做的构造方法。正好要给这个解析类构造方法传参 如果用 require 引入类的话 是会触发 类名构造方法的 但是如果是用 spl_autoload_register 加命名空间自动引入的类
(必须是 既使用了命名空间 又使用了自动引入) 是无法触发类名构造方法的 必须写成 __construct() 才可以
结尾
往往很多小细节就会导致代码出现问题,所以调试的时候一定要仔细一点。
php版本 5.6.3
起因
项目用了命名空间,通过命名空间 设置 spl_autoload_register (自动引入) 来加载类。但是加载了一个解密类时不管怎么调试 都无法解密出数据。
分析
尝试了很多次,一开始以为是框架问题。因为把加密类单独拿出来做测试时可以得到解密的字符串的。后来分析了半天 不是框架的问题。而是解密类太古老了 还是用的类名做的构造方法。正好要给这个解析类构造方法传参 如果用 require 引入类的话 是会触发 类名构造方法的 但是如果是用 spl_autoload_register 加命名空间自动引入的类
(必须是 既使用了命名空间 又使用了自动引入) 是无法触发类名构造方法的 必须写成 __construct() 才可以
结尾
往往很多小细节就会导致代码出现问题,所以调试的时候一定要仔细一点。
相关文章推荐
- PHP中的use、命名空间、引入类文件、自动加载类的理解
- 避免使用PHP保留字作为常量、类名和方法名,以及命名空间的命名
- PHP 5.3中的命名空间使用方法浅述
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- php命名空间如何引入一个变量类名?
- PHP 5.3中的命名空间使用方法
- 关于Thinkphp3.2 命名空间的说明-php5.3命名空间介绍-TP自动加载
- PHP中的use、命名空间、引入类文件、自动加载类的理解
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
- PHP5.3以后的版本不再支持用ISAPI进行扩展在IIS里运行了,应该用FastCGI方法配置
- PHP中的use、命名空间、引入类文件、自动加载类的理解
- 有了PHP 5.3的__callStatic魔术方法,就可以做按类名和方法名同时魔术了
- Yii引入PHPExcel修改其自动加载方法
- PHP 5.3新特性命名空间规则解析及高级功能
- 让PHP<5.3版本支持get_called_class()方法
- 获得当前方法或页面的命名空间、类名和方法名
- 黑马程序员--构造方法与命名空间
- php版本的英文计1,中文计2的截字方法,自动支持utf8与gbk
- 获得当前方法或页面的命名空间、类名和方法名
- JavaScript 编程引入命名空间的方法