PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function


Posted in PHP onFebruary 05, 2017

1、错误类型:PHP致命错误

Error type: PHP Fatal error
Fatal error: Cannot redeclare (a) (previously declared in (b)) in (c) on line (d)

2、错误描述:

该错误报告表示你正企图对已经定义过的函数进行再次定义,其中

a----表示重复定义的函数名;
b----第一次定义该函数时的文件名称及行号;
c----第二次定义该函数时的文件名称;
d----第二次定义该函数时的行号。

3、原因及解决方法:

原因:你连续两次使用相同名称来定义一个函数,例如

function myFunction(){}
function myFunction(){}

结果如下

Fatal error:Cannot redeclare myfunction()(previously declared in(path):2)in(path) on line 1

解决:

找到已经声明过的函数,看看是什么需要导致你再次定义了它。如果只是单纯的忘记之前已经定义过,那么将其中一个声明删除掉就是。比如你的脚本文件排列异常混乱,并且你可能使用了大量的include()之类的函数,这将导致你很难从混乱的代码当中理清思路。不过,如果你的PHP版本比较新(PHP 5.3.8+)貌似就可以用命名空间来解决那种的确有重复定义函数必要的情况。

4 PHP严重致命错误处理解决举例说明如下

1)在同一个文件中重复声明了两次同名的类:

例如:

<?php 
class Foo {} 
// some code here 
class Foo {} 
?>

在第二个 Foo 的地方就会报错。

解决:去掉第二个Foo,或者重命名。

为了防止重复定义,可以在定义一个新的类的时候判断一下这个类是否已经存在:

if(class_exists('SomeClass') != true) 
{ 
 //put class SomeClass here 
}

2)重复包含相同的类文件:

例如:对于某个类文件some_class.php,在a.php中

include "some_class.php"; 

include "some_class.php";

在b.php中

include "a.php"; 
include "some_class.php"; 
include "a.php";
include "some_class.php";

就会报错。

解决:将上述的include全部替换为include_once

3)该类为PHP类库中内置的类。

判断方法:在一个空文件中写入

<?php 

class Com 
{ 
 

} 
?>

这时候提示Cannot redeclare class Com,说明这个类就是PHP内置的类。不能使用。

另外,要避免使用太大众化的类名,比如Com,这个类在Linux使用可能是正常的,在Windows环境却无法运行。

 

再记一个网上找到的解决方法,可能在某些场合有用,先记着

if (!class_exists('pageModule')){ 
require_once(PATH_site.'fileadmin/scripts/class.page.php');
}

上面的办法不适用于使用了php __autoload类加载的方法 ,但己经可以解决办法问题了,__autoload是自动加载的我们只要把相同类名找出来然后重命名即可。

PHP 相关文章推荐
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
php实现的mongodb操作类
May 28 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
php版微信自定义回复功能示例
Dec 05 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
php中用unset销毁变量并释放内存
May 10 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 #PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 #PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 #PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 #PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 #PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 #PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 #PHP
You might like
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP常用数组函数介绍
2014/07/28 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
jQuery功能函数详解
2015/02/01 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python类属性与实例属性用法分析
2015/05/09 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
如何实现一个自定义类的序列化
2012/05/22 面试题
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
英语自荐信常用语句
2013/12/13 职场文书
八一建军节感言
2014/02/28 职场文书
大学新闻系求职信
2014/06/03 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书