经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
[PHP] 使用适配器模式处理数据库对象
来源:cnblogs  作者:陶士涵  时间:2021/4/6 10:17:20  对本文有异议

适配器模式的定义:

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作

 

包括两种模式:

类适配器模式与对象适配器

类适配器:Adapter类与被适配类是继承关系

对象适配器:Adapter对象与被适配类对象是委托关系 , 委托关系就是通过构造函数或者方法传入被适配对象

 

PDOAdapter 继承 PDO类 , 扩展里面的方法 , 这就是类适配器模式

ArticleModel传入PDOAdapter 对象 , 扩展PDOAdapter 对象的方法 , 这就是对象适配器

  1. <?php
  2. //类适配器
  3. class PDOAdapter extends PDO{
  4. private $dsn = null;
  5. private $username = null;
  6. private $password = null;
  7. private $timeout = 30;
  8. private $charset = "utf8";
  9. private $options = array(
  10. PDO::ATTR_AUTOCOMMIT => true,
  11. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  12. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  13. );
  14. public function __construct($dsn, $username, $password, $timeout = null){
  15. $this->dsn = $dsn;
  16. $this->username = $username;
  17. $this->password = $password;
  18. $this->timeout = intval($timeout);
  19. parent::__construct($dsn, $username, $password, $this->options);
  20. $this->exec("set names ".$this->charset);
  21. }
  22. public function execute($sql, $params = array()){
  23. $stmt = $this->prepare($sql);
  24. $execStatus=$stmt->execute($params);
  25. return $execStatus;
  26. }
  27. public function getAll($sql, $params = array()){
  28. $stmt = $this->prepare($sql);
  29. $stmt->execute($params);
  30. return $stmt->fetchAll();
  31. }
  32. }
  33. //对象适配器,使用委派
  34. class ArticleModel{
  35. private $pdo=null;
  36. public function __construct($pdo){
  37. $this->pdo=$pdo;
  38. }
  39. //委派调用PDOAdapter的getAll方法
  40. public function getArticleList(){
  41. $res=$this->pdo->getAll("select * from countries");
  42. return $res;
  43. }
  44. }
  45. class Controller{
  46. public function doAction(){
  47. try {
  48. $pdo=new PDOAdapter("mysql:host=127.0.0.1;port=3306;dbname=phpfly","phpfly","phpfly");
  49. $model=new ArticleModel($pdo);
  50. $res=$model->getArticleList();
  51. var_dump($res);
  52. } catch (Exception $e) {
  53. var_dump($e->getMessage());
  54. }
  55. }
  56. }
  57. $c=new Controller();
  58. $c->doAction();

 

原文链接:http://www.cnblogs.com/taoshihan/p/14596161.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号