PHP设计模式之工厂模式与单例模式


Posted in PHP onSeptember 28, 2016

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
PHP中ADODB类详解
Mar 25 PHP
php array_walk() 数组函数
Jul 12 PHP
apache php模块整合操作指南
Nov 16 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
php插件Xajax使用方法详解
Aug 31 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 PHP
PHP类相关知识点实例总结
Sep 28 #PHP
PHP 闭包详解及实例代码
Sep 28 #PHP
php类的自动加载操作实例详解
Sep 28 #PHP
PHP对象克隆clone用法示例
Sep 28 #PHP
PHP简单遍历对象示例
Sep 28 #PHP
PHP标准类(stdclass)用法示例
Sep 28 #PHP
PHP类型约束用法示例
Sep 28 #PHP
You might like
PHP生成静态页
2006/11/25 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
详解package.json版本号规则
2019/08/01 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
简历中的自我评价范文
2014/02/05 职场文书
医院节能减排方案
2014/06/13 职场文书
大学学生会辞职信
2015/05/13 职场文书
文明礼貌主题班会
2015/08/14 职场文书
浅析Python中的套接字编程
2021/06/22 Python
Redis 常见使用场景
2021/08/30 Redis
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS