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 相关文章推荐
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
php实现的Captcha验证码类实例
Sep 22 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
浅谈PHP7中的一些小技巧
May 29 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python 字符串池化的前提
2020/07/03 Python
工厂会计员职责
2014/02/06 职场文书
献爱心倡议书
2014/04/14 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
请病假条范文
2015/08/17 职场文书
计算机实训心得体会
2016/01/14 职场文书