论坛首页 编程语言技术论坛

php 常用的两个设计模式

浏览 4858 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-07  
PHP
  1. 工厂模式

  工厂模式提供了一个在实时状态下实例化对象的机制。
<?php
class creditCardProcessor
{
    public static function factory($provider)
    {
        switch ($provider)
        {
            case 'Verisign':
                //include "Verisign.php";
			    echo 'Verisign.php';
                break;
            case 'PayPal':
                //include "Paypal.php";
			    echo 'Paypal.php';
                break;
            default:
                exit("Invalid CC Provider");
      }
      return new $provider;
    }
}
$cc = creditCardProcessor::factory('PayPal');
?>


  运行结果如下图所示:


  2. 单例模式

  单例模式在确保只有一个实例运行时使用,也可以用来防止类通过clone来复制。

class dbMysgl
{
    private static $conn;
    private function __construct()
    {
        $this->conn = mysql_connect(host, login, pass);
    }
    public static function singleton()
    {
        if(!self::$conn)
        {
            $c = __CLASS__;
            self::$conn = new $c;
        }
        return self::$conn;
    }
    public function __clone()
    {
        trigger_error("Only one connection may exist");
    }
}
$db = new dbMysgl();        // 失败
$db = dbMysgl::singleton(); // 使用的正确方法
$db2 = clone($db);          // 失败



转载地址:http://www.xuekaifa.com/article/20100626/000067.html


   发表时间:2011-03-01  
不是很明白
0 请登录后投票
   发表时间:2011-03-08  
mysql 集群是什么意思呢?
谁能给详细的介绍一下呢?
0 请登录后投票
   发表时间:2011-05-03  
我也不是很明白
0 请登录后投票
   发表时间:2011-05-04  
何必 switch 呢,PHP 和 Python 一样可以动态实例化的。
关于常用设计模式,官网手册也有说明。
我只是觉得,由于 PHP 只有 Request 的生命期,所以所谓的单例模式并不是真正的单例。
而我们也不必把 Java 中的设计模式实现习惯照搬 PHP 中,如果要“单例”,写一个只有静态方法和静态属性的类就是单例了。这个在 Java 或者 Python 的 Web 应用都做不到的,因为只有 PHP 会以 Request 为最大请求周期。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics