这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 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);
运行结果如下:
- 20
- object(instance)[1]
- public 'val' => int 20
- object(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 one
- public
- function get_one($sql) {
- $res = $this - >query($sql);
- if ($result = mysql_fetch_row($res)) {
- return $result[0];
- }
- }
- //fetch row
- public
- function get_row($sql) {
- $res = $this - >query($sql);
- if ($result = mysql_fetch_assoc($res)) {
- return $result;
- }
- return false;
- }
- //fetch all
- public
- function get_all($sql) {
- $res = $this - >query($sql);
- $arr = array();
- while ($result = mysql_fetch_assoc($res)) {
- $arr[] = $result;
- }
- return $arr;
- }
- }
- $mysql = mysqldb: :getInsance();
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0802/342389.html