PHP严重致命错误处理:php Fatal error: Cannot redeclare clas

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

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

}

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是自动加载的我们只要把相同类名找出来然后重命名即可。

转载请注明:文章转载自:[169IT-最新最全的IT资讯]
本文标题:PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function

PHP严重致命错误处理:php Fatal error: Cannot redeclare clas

时间: 2024-12-26 10:05:57

PHP严重致命错误处理:php Fatal error: Cannot redeclare clas的相关文章

Zen Cart 138 在PHP5.3环境下出现的Fatal error: Cannot redeclare date_diff()

Zen Cart 138 在PHP5.3环境下出现的Fatal error: Cannot redeclare date_diff() in includes/functions/functions_general.php错误的解决方法 原因是在这个文件中已存在函数:date_diff()了,此时,我们需要做到与旧版本的PHP兼容,将Zen Cart中的date_diff()函数进行修改,解决方法如下: if(function_exists('date_diff') && phpversi

Fatal error: Cannot redeclare tran() (previously declared in

解决方法如下: 1.你该段源码里面是不是有include 或者require 之类的包含其他文件函数 包含的文件里已经有 函数 nw() 的定义 而这段代码里又有nv()的定义 所以出现redeclare (重复声明/定义)的错误2.php包含的两个文件有同名函数,会出现什么后果?  答: (1)会报错: Fatal error: Cannot redeclare 同名函数名称() (previously declared in 出错程序:出错行数) (2)会提示Fatal error:Cann

phprpc的使用示例以及报错Fatal error: Cannot redeclare gzdecode() in D:\wamp\www\immoc\phprpc\compat.php 处理

今天看书,发现了PHPRPC这个好东东,故在此写下来以作笔记. PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过程调用协议. 下载地址:http://www.phprpc.org/zh_CN/download/ 该版本直接解压后就可以使用,其中bigint.php.compat.php.phprpc_date.php.xxtea.php属于公共文

Fatal error: Cannot redeclare class 原因详细介绍

在开发中估计不少基友们遇见这个错误: Fatal error: Cannot redeclare class app_vendor_category in ...... 说明你重复定义类啦, 我们程序员在开发的时候一般都是,做的类的自动加载吧,自动的引入文件 有时候难免重复引入文件,所以会报这个错误, 解决方法: include 'leyangjun.class.php';     改成    include_once 'leyangjun.class.php';

致命错误 RC1121: RC : fatal error RC1121 : I/O error reading file

这是关于多国语言转换的问题,原来的程序是英文版,在中文版里面就有这个问题.因为在Microsoft Windows 下,语言用代 码 页来识 别,不同 语言 用不同代码 页来表示, 如" 简体中文" 用代码页936 表示, 而"  美国英 语" 则 用代码页1252 表 示.其他语言不提了. 解决方法:把英文版本改为中文版本 用文本文档打开项目的资源文件(注意一定是文本文档哦!) 找到下面一段代码: // English (U.S.) resources#if !d

【Visual Studio】解决错误 fatal error C1010: unexpected end of file while looking for precompiled head(转)

原文转自 http://blog.csdn.net/liuqiyao_01/article/details/38867145 在编译VS时候,出现fatal error C1010: unexpected end of file while looking for precompiled head. 问题详细解释:致命错误C1010,在寻找预编译指示头文件时,文件未预期结束.就是没有找到预编译指示信息的问文件. 顾名思义就是预编译因为缺少了预编译文件而失败.解决方法显然可以取消预编译,或者帮助编

解决错误 fatal error C1010: unexpected end of file while looking for precompiled head

在编译VS时候,出现fatal error C1010: unexpected end of file while looking for precompiled head. 问题详解:致命错误C1010,在寻找预编译指示头文件时,文件未预期结束.就是没有找到预编译指示信息的问文件. 顾名思义就是预编译由于缺少了预编译文件而失败.解决方法显然能够取消预编译,或者帮助编译器找到预编译文件. 故解法: 1.右键单击项目project中的cpp文件,在菜单Project->Settings->C/C

VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

出现错误:error C1853: "Debug\ConsoleApplication1.pch"预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 相关资料: http://blog.sina.com.cn/s/blog_674cc1fd0100jirq.html 如果按上面方式调用还不成功,把.c文件的预编译去掉 右击.c文件,属性 ->点击左侧 预编译头,右侧 预编译头选项选择 不使用预编译头 对于为什么要去掉预编译头呢,可参考http:

Boost test vs2013 fatal error C1001

Boost test vs2013 fatal error C1001 Boost test库提供了一个用于单元测试的基于命令行界面的测试套件UTF:Unit Test Framework,具有单元测试.检测内存泄露.监控程序运行的功能.根据官网介绍boost支持很多编译器.然而在Visual Studio 2013中使用boost的test模块时会报致命错误,如下图所示: 输出报错信息如下: 1>------ Build started: Project: Test, Configuratio