PHP 自动加载类无法找到的问题解决的总结
来源:互联网 发布:app开放端口什么意思 编辑:程序博客网 时间:2024/05/17 05:59
这周利用公司的PHP框架,开发类,但是自动加载该类后,总是找不到该类。本文将对记录如何尝试解决这个问题和最后的一些总结思考。
问题描述:
在ActivationService.php定义类ActiveService,在Autoload.php注册回调spl_autoload_register自动将ActiveService.php中ActiveService类加载到内存,然后写一个测试类ActivationServiceTest,在ActivationServiceTest中调用ActiveService这个类的公用方法。运行ActiveServiceTest,结果显示无法找到ActiveService这个类。
错误输出: ?PHP Fatal error: Class 'ActiveService' not found in /path/to/ActivationServiceTest.php line 18
可能原因分析:
1. 可能是Autoload.php中,ActiveService.php文件的路径或者文件名写错了。仔细检查后,排除该可能性。2. spl_autoload_register调用失败。var_dump(spl_autoload_register())的结果,显示ture,排除这种可能。
3. strace -f -o log php ActivationServiceTest.php 跟踪ActivatonServiceTest.php的调用过程发现:
KidsConfig和ActiveService类都是相似的类,从上面两个图可以看出来,都能够正常加载KidsConfig.php和ActiveService.php文件至内存,但是ActiveService.php加载完后,会执行write(1, "?", 1) 就是向标准输出一个问号"?",从上面的问题描述可以看到(红色的问号"?")。很困惑为什么会输出一个问号。
4. 在ActiveService的__construct()方法中,加入语句echo "construct ActiveSerivce";。再次运行,结果屏幕上没有输出这个行提示信息。因此可以判断,程序根本没有初始化类ActiveService。这是什么原因呢?应该是这个类有语法错误,但是在PhpStorm中,没有发现错误的提示,而且这个类的编码风格和其他的类极为统一,一般来说不会出现语法错误。
5. 尝试将ActiveService的代码拷贝到ActivationServiceTest.php文件中执行,结果也是一样,也输出一个问号。
6. 实在没办法解决,求助同事。同事在她的机器上新建了ActiveService的代码拷贝到新建的ActivationServiceTest1.php文件中执行,居然成功了。
diff了一下ActivationServiceTest.php和ActivationServiceTest1.php的区别。
难道只是这个常量定义不同,导致我的无法执行,而她的可以?我尝试将下ActivationServiceTest.php修改成ActivationServiceTest1.php完全一致,运行果然可以执行。
因此,估计可能是这个常量定义有问题,想想这个常量里面的汉字“首次绑定(激活)”是我直接copy过来的,可能字符集不一致,导致虽然从Phpstorm上看其来没什么问题,但是实际上不是这么回事。我用Pspad纯文本模式打开文件,果然发现问题了:
难怪会根本无法初始化这个类啊。这是类的定义本身就有语法错误,只是从Phpstorm看不出来。
重新定义常量后,问题得到解决。
总结:
- PHP 自动加载类无法找到的问题解决的总结
- PHP类的自动加载
- php的自动加载类
- php类的自动加载
- PHP类的自动加载
- PHP类的自动加载
- PHP的自动加载
- 安装php加速器Zend guard loader出现无法加载,没有找到php5.dll 的错误
- oci.dll无法加载的问题解决
- ubuntu下adb无法找到真机的问题解决
- Linux打开VMWare无法找到kernel header path的问题解决
- VSTS2010无法自动Checkout的问题解决
- PHP类的自动加载__autoload && spl_autoload_register
- PHP的类自动加载机制
- PHP的类自动加载机制
- PHP的类自动加载机制
- PHP 自动加载类的方法笔记
- php类文件的自动加载机制
- junit开源测试框架学习笔记一探寻junit基本组件TestCase、TestSuite、TestRunner和TestListener
- vmware中nat模式上网配置
- tr函数
- 投票
- 第十六周项目2.2去掉指定字符串
- PHP 自动加载类无法找到的问题解决的总结
- 程序员应该读的书
- 模取幂
- ubuntu下的相关配置文件
- 如何防止哲学家就餐问题而引起的死锁
- Servlet、Biz、Dao和Vo关系描述
- solaris10使用projadd进行资源限制的添加(seminfo_*)
- unity3d 模拟人体皮肤
- linux下装法firefox64位flash插件