Welcome

首页 / 网页编程 / PHP / PHP设计模式之工厂模式与单例模式

本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法。分享给大家供大家参考,具体如下:
设计模式简单说应对某类问题而设计的解决方式
工厂模式:应对需求创建相应的对象
class factory{function __construct($name){if(file_exists("./".$name.".class.php")){return new $name;}else{die("not exist");}}}
单例模式:只创建一个对象的实例,不允许再创建实例,节约资源(例如数据库的连接)
class instance{public $val = 10;private static $instance ;private function __construct(){}private function __clone(){}//设置为静态方法才可被类调用public static function getInstance(){/*if(!isset(self::$instance)){self::$instance = new self;}*/if(!isset(instance::$instance)){instance::$instance = new self;}return instance::$instance;}}$obj_one = instance::getInstance();$obj_one->val = 20;//clone可以调用__clone()克隆即new出一个新的的对象//$obj_two = clone $obj_one;$obj_two = instance::getInstance();echo $obj_two->val;echo "<p>";var_dump($obj_one,$obj_two);
运行结果如下:
20object(instance)[1] public "val" => int 20object(instance)[1] public "val" => int 20
应用:数据库连接类(database access oject)
class mysqldb{private $arr = array("port" => 3306,"host" => "localhost","username" => "root","passward" => "root","dbname" => "instance","charset" => "utf8" );private $link;static $instance;private function __clone(){}private function __construct(){$this->link = mysql_connect($this->arr["host"],$this->arr["username"],$this->arr["passward"]) or die(mysql_error());mysql_select_db($this->arr["dbname"]) or die("db error");mysql_set_charset($this->arr["charset"]);}static public function getInsance(){if(!isset(mysqldb::$instance)){mysqldb::$instance = new self;}return mysqldb::$instance;}public function query($sql){if($res = mysql_query($sql)){return $res;}return false;}//fetch onepublic function get_one($sql){$res = $this->query($sql);if($result = mysql_fetch_row($res)){return $result[0];}}//fetch rowpublic function get_row($sql){$res = $this->query($sql);if($result = mysql_fetch_assoc($res)){return $result;}return false;}//fetch allpublic function get_all($sql){$res = $this->query($sql);$arr = array();while($result = mysql_fetch_assoc($res)){$arr[] = $result;}return $arr;}}$mysql = mysqldb::getInsance();
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。