1. <?php
  2. /**
  3. * 事件委托:数据库查询构造器
  4. */
  5. //被委托的类
  6. class Query
  7. {
  8. //创建类的唯一实例 :pdo对象
  9. private static $db;
  10. protected $table;
  11. protected $field;
  12. protected $limit;
  13. //private 私有的 阻止此类在外部进行实例化
  14. private function __construct()
  15. {
  16. }
  17. static function connect($dsn,$username,$pwd)
  18. {
  19. //创建pdo类的唯一实例 :pdo对象
  20. if (is_null(static::$db))
  21. {
  22. static::$db = new PDO($dsn,$username,$pwd);
  23. }
  24. //返回query实例
  25. return new static();
  26. }
  27. public function table($table)
  28. {
  29. $this->table = $table;
  30. return $this;
  31. }
  32. public function field($field)
  33. {
  34. $this->field = $field;
  35. return $this;
  36. }
  37. public function limit($limit)
  38. {
  39. $this->limit = $limit;
  40. return $this;
  41. }
  42. public function getSql()
  43. {
  44. return sprintf('SELECT %s FROM %s LIMIT %d',$this->field,$this->table,$this->limit);
  45. }
  46. public function select()
  47. {
  48. return static::$db->query($this->getSql())->fetchAll(PDO::FETCH_ASSOC);
  49. }
  50. }
  51. class Db
  52. {
  53. static function __callStatic($method,$args)
  54. {
  55. $dsn = 'mysql:localhost;dbname=yu';
  56. $username = 'root';
  57. $pwd ='123456yu';
  58. //获取到被委托的类query实例
  59. $query = Query::connect($dsn,$username,$pwd);
  60. return call_user_func([$query,$method],...$args);
  61. }
  62. }
  63. $res = Db::table('cate')->field('catname,catid')->limit(5)->select();
  64. echo '<pre>';
  65. print_r($res);
  66. ?>

更多相关文章

  1. 事件委托的应用
  2. 关于PHP递归函数以及处理多维数组和目录文件实例
  3. PHP获取两个时间之间的所有日期
  4. 数据库请求委托代理
  5. 补:0811作业 类与对象
  6. 作业内容:oop基础:请举例实例演绎以下难点 1. 类(对象抽象化的结
  7. php面向对象的入门学习(类与对象)
  8. 1. 请实例演绎你对面向对象类与对象关系的理解? 2. 请实例演绎oop
  9. 类的属性、封装、构造函数

随机推荐

  1. 【移动安全实战篇】————5、Android屏
  2. Android webview should overrideUrlLoad
  3. android lrucache使用
  4. Android通讯
  5. 状态开关按钮ToggleButton
  6. android 发送短信
  7. AnimatedStateListDrawable介绍
  8. Android之列表对话框
  9. Android图片旋转实例
  10. Android中模拟点击软件的实现原理探究