RSS Feed

Posts Tagged ‘php’

  1. 编码问题导致的Headers already sent错误

    March 5, 2012 by Luin

    前些日子同学找我来说我帮他做的网站的注册功能失效了。我看了一下发现是由于301跳转失败导致的。
    查看日志错误内容为:

    Warning: Cannot modify header information – headers already sent by (output started at…

    但看了一下源代码却没有发现问题,在本机运行也一切正常。<?php前面和?>后面都没有字符。

    百思不得其解,使用W3C的HTML校验却发现了:

    Byte-Order Mark found in UTF-8 File.

    才发现是由于他们在部署网站改配置时用记事本编辑保存成了UTF-8 with BOM导致的问题。解决方法也很简单,改成without BOM就好了。

    由此可见编辑器对Web开发有多重要(我一直在用Coda,很顺手)。

    顺便提示一下PHP开发好习惯,就是只写<?php不写?>,原因就是谁也不能保证啥时手贱在?>后面打些什么东西导致Headers already sent错误(当然如果你把PHP当模板语言用就不能不用?>了)。


  2. PHP实现单例模式

    June 17, 2011 by Luin

    目前的一个项目有几个模块需要实现单例模式,于是想实现一个Singleton基类来使这些模块通过继承该基类实现Singleton。

    这是一个Singleton的PHP实现,然而这时希望通过如下代码使Database类实现Singleton是不可行的:

    因为__CLASS__获得的永远只是父类(Singleton)而不是子类,所以无法获知子类类信息,自然也就无法实现子类的单例。

    PHP5.3 提供了get_called_class()函数,用过此函数可以实现Singleton的继承

    其它实现方式

    为了能在PHP5.3以前实现Singleton的继承,我们可以定义一个静态数组来维护类的实例,定义以及使用方法如下: