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 数组的创建、调用和更新实现代码
Mar 09 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
如何设置mysql允许外网访问
Jun 04 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
php实现RSA加密类实例
Mar 26 PHP
详解PHP中的状态模式编程
Aug 11 PHP
smarty学习笔记之常见代码段用法总结
Mar 19 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php使用curl访问https示例分享
2014/01/17 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php实现的SESSION类
2014/12/02 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python中logging模块的用法实例
2014/09/29 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python实现贪吃蛇双人大战
2020/04/18 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
汽车维修工岗位职责
2014/02/12 职场文书
交警失职检讨书
2015/01/26 职场文书
鸟的天堂导游词
2015/01/31 职场文书
导游词格式
2015/02/13 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
python - timeit 时间模块
2021/04/06 Python
浅谈Python项目的服务器部署
2021/04/25 Python