叶雨梧桐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
分类
最新文章
最近回复
  • 梦青年: 我的网站下线了,你可以把我的友链去掉了,感谢多年的支持和关注~ 梦青年。
  • 便宜VPS: 已添加贵站链接,我站:https://www.vultrclub.com,站:便宜VPS
  • vultr: 朋友 交换链接吗
  • 罗小黑: py小白看不懂啊! Traceback (most recent call last): ...
  • 罗小黑: 安装出错,下面无法继续 >>> pip install MySQL-python Synt...
  • 一抹阳光: 学习了(ಡωಡ)
  • wu先生: 我来了。
  • 欣欣: 嗷呜 原来树莓派不是吃的
  • 繁华落尽: 我也是碰到了这种问题,求具体解决方案,谢谢
  • aaa365: 128M小内存 npm install -g hexo-cli 的时候直接就被系统kill掉进...
归档