Fatal error: Cannot redeclare class 原因分析与解决办法
错误提示
Fatal error: Cannot redeclare class ….
从字面来看也很好理解,说明是重复定义了类,找了一下自己的代码,是因为存在同名的类导致的,修改了类名就好了。
原因分析
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"; |
在b.php中
代码如下 | 复制代码 |
|
就会报错。
解决:将上述的include全部替换为include_once
3.该类为PHP类库中内置的类。
判断方法:在一个空文件中写入
代码如下 | 复制代码 |
<?php class Com { } ?> |
这时候提示Cannot redeclare class Com,说明这个类就是PHP内置的类。不能使用。
另外,要避免使用太大众化的类名,比如Com,这个类在Linux使用可能是正常的,在Windows环境却无法运行。
再记一个网上找到的解决方法,可能在某些场合有用,先记着
代码如下 | 复制代码 |
|
上面的办法不适用于使用了php __autoload类加载的方法 ,但己经可以解决办法问题了,__autoload是自动加载的我们只要把相同类名找出来然后重命名即可。
在php中我们如果没进行时区配置运行使用php日期时间函数时会提示一些时区问题的错误,也有可能出现时区不对,与北京时间相关几个小时问题,下面我来一并给各位同学介绍。在用PHP5.3以上的PHP版本时,只要是涉及时间的会报一个
我在使用
<?
echo date('Y-m-d');
?>
提示
"PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in"
实际上,从 PHP 5.1.0 ,当对使用date()等函数时,如果timezone设置不正确,在每一次调用时间函数时,都会产生E_NOTICE 或者 E_WARNING 信息。而又在php5.1.0中,date.timezone这个选项,默认情况下是关闭的,无论用什么php命令都是格林威治标准时间,但是PHP5.3中好像如果没有设置也会强行抛出了这个错误的,解决此问题,只要本地化一下,就行了。
以下是三种方法(任选一种都行):
一、在页头使用date_default_timezone_set()设置 date_default_timezone_set('PRC'); //东八时区 echo date('Y-m-d H:i:s');
二、在页头使用 ini_set('date.timezone','Asia/Shanghai');
三、修改php.ini。打开php5.ini查找date.timezone 去掉前面的分号修改成为:date.timezone =PRC
今天白天才架起PHPStorm+xdebug的调试环境,就遇到了各式各样的问题:访问超慢响应、访问超快响应但是是空白页。
问题A解决的方法很多,总归还有解决办法;问题B我估计是线程问题,也许可以通过调试php.ini的配置搞定,也许不是,很难讲清楚,线程的问题可能要跟xdebug的版本扯上关系。
解决方式
PHP.ini 找到memory_limit参数,增大!
换一个浏览器!我之前一直用Google Chrome调试程序,之后就开始变慢下来,直到每个页面变成6秒才加载完毕,已经忍无可忍。换成了Firefox、IE均没有这个问题。 (这个方法很好用,还能立刻见效!)
使用 xdebug.profiler_enable_trigger配置,有选择的运行xdebug功能探查程序。
xdebug.remote_host 的值最好跟你服务器的IP一致,比方说你是通过localhost访问,则这里写localhost,你是127.0.0.1访问,就写127.0.0.1
看看你的xdebug.profiler_output_dir目录是否已经达到几G了?(一套电商程序很可能在持续开发十几个小时后,xdebug.profiler_output_dir目录的xdebug文件达到好几G!)
平时不需要的时候,最好关闭xdebug!
xdebug.remote_enable = 0
xdebug.profiler_enable = 0
xdebug.remote_autostart = false
最后,一句话:DON’T RUN XDEBUG ON PRODUCTION.
php中使用内置的reset函数可以获取array的第一个元素的值。例如:
代码如下 | 复制代码 |
$arr = array('one', 'two', 'three'); echo reset($arr); |
// 输出的结果为 one对于下述代码,如果php开启了"Strict Standards",将会看到"Strict Standards: Only variables should be passed by reference in"的提示。
代码如下 | 复制代码 |
$str = 'netingcn.com'; echo reset(explode('.', $str)); |
为什么会这样呢?可以先看看reset函数的定义:
function reset (array &$array) {}从定义中可以看到,reset接受的参数是一个array的引用。而上述代码中explode返回值不是任何array的引用,所以在"Strict Standards"下会有上述提示。解决办法很简单,只需要把reset(explode('.', $str))分两步写即可。第一步先把explode的返回值赋给一个变量,第二步把这个变量作为reset参数。
出现上面的提示的不只是reset函数,只要参数接受的是对象引用,而传值直接使用function返回值都会看到那样的提示。例如内置的array_pop、shuffle、curent、next、prev、next等等
php 中使用memcached扩展来访问memcached时,当memcached服务器无法正常连接,在默认设置下会造成请求响应变慢。注意:无法正常连接指网络故障,如两台服务器无法进行通信等,只要能ping通,就算memcached服务没有开启或down掉,不会影响响应时间,只是memcached没有启作用。
设置timeout时间通过常量Memcached::OPT_CONNECT_TIMEOUT来控制,默认是4000毫秒(php 官网显示1000,我测试版本1.0.2和2.0.1都是4000)。另外1.0.2和2.0.1还有很大差别。1.0.2在执行addServer时就会连接memcached服务器,而且执行命令时候需要2倍的timeout时间,所有当memcached无法连接时候,花费时间是3倍的timeout时间。
2.0.1在php 5.2中似乎有bug,无法使用,具体参看:https://bugs.php.net/bug.php?id=61283。
相关文章
- 409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25- http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
- Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
- 403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
- 412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
- 今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
- 407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
- HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
- 410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
- 每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
- 下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
- 自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
- 这篇文章主要介绍了Jrebel启动失败解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-07
- 因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20