叶雨梧桐BLOG

解决PHP诡异的class not found 问题

发布时间:2017年8月8日 / 分类:PHP笔记 / 吐槽

问题描述

本地测试环境跑原始demo和自己的demo很顺滑。调整到生产环境上各种500,各种class not found。

调试过程

1.各种die,var_dump,对比复制字符,注释代码注释代码。无果
2.查原始github项目。无果
3.各种百度。无果
4.各种谷歌。无果
5.调整了下代码顺序。尼玛解决了。

解决方案

命名空间namespace要放在最前面!!!
1.原始代码(有问题,报500错误)

require_once(__DIR__.'/classes/CFPropertyList/CFPropertyList.php');

$plist = new CFPropertyList(__DIR__.'/Info.plist');
var_dump( $plist->toArray() );

2.调整1步代码(有问题,报class not found)

error_reporting( E_ALL );
ini_set( 'display_errors', 'on' );
require_once(__DIR__.'/classes/CFPropertyList/CFPropertyList.php');

$plist = new CFPropertyList(__DIR__.'/Info.plist');
var_dump( $plist->toArray() );

3.调整2步代码(有问题,报500错误)

error_reporting( E_ALL );
ini_set( 'display_errors', 'on' );
namespace CFPropertyList;
require_once(__DIR__.'/classes/CFPropertyList/CFPropertyList.php');
$plist = new CFPropertyList(__DIR__.'/Info.plist');
var_dump( $plist->toArray() );

4.调整3步代码(正确,very 正确)

namespace CFPropertyList;
error_reporting( E_ALL );
ini_set( 'display_errors', 'on' );
require_once(__DIR__.'/classes/CFPropertyList/CFPropertyList.php');
$plist = new CFPropertyList(__DIR__.'/Info.plist');
var_dump( $plist->toArray() );

总结(关于namespace的使用方法)

0.命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀;
1.命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类的名字互不影响;
2.当前文件的第一个命名空间前面不能有任何代码;
3.同一文件中可以创建多个命名空间;

标签:没有标签呢

版权声明:除特殊注明外,均由叶雨梧桐原创,转载请保留文章出处;
本文链接:http://gt520.com/phpbj/386.html
订阅叶雨梧桐BLOG RSS
分类
最新文章
最近回复
  • 森七: 想转去ty,收藏了贵站肯定会用到 make
  • 寻芜兮: 博主您好,您写的《Xshell 进行科学上网的正确姿势》中图片已经挂掉了,可以再补档一次吗。
  • 天津网站建设: 感谢博主分享
  • 博客大全: 钻研精神会让你学到更多,加油!
  • 麦麦米: 不错的文章呢
  • 薇洛迪兰: 应该是服务器的问题吧
  • 关于我们: 弱弱的问下博主,接受友情链接吗?
  • 今日头条: 文章不错非常喜欢
  • 今日头条: 文章不错非常喜欢
  • 码客: 定时任务我直接用cron
归档