博客列表 >演示构造器中的数据库的增删查改,方法拦截器及后期静态绑定

演示构造器中的数据库的增删查改,方法拦截器及后期静态绑定

简行
简行原创
2020年07月29日 11:55:31693浏览

一.实例演示查询构造器中的数据库的增删查改

1.代码

  1. <?php
  2. //查询类
  3. class Query
  4. {
  5. //数据库连接
  6. protected $db;
  7. //表名
  8. protected $table;
  9. //字段
  10. protected $filed;
  11. //条件
  12. protected $where;
  13. //数据条数
  14. protected $limit;
  15. //修改字段
  16. protected $set;
  17. //构造方法连接数据库
  18. public function __construct($dsn,$username,$password)
  19. {
  20. $this ->connert($dsn,$username,$password);
  21. }
  22. //数据库连接
  23. protected function connert($dsn,$username,$password){
  24. try{
  25. //连接数据款
  26. $this->db = new PDO($dsn,$username,$password);
  27. } catch(PDOException $e){
  28. //捕捉特定于数据库信息的PDOEXCEPTION 异常
  29. echo $e->getMessage();
  30. } catch(Throwable $e){
  31. //捕捉拥有Throwable接口的错误或者其他异常
  32. echo $e->getMessage();
  33. }
  34. }
  35. // 设置默认的数据表名称
  36. public function table($table)
  37. {
  38. $this->table = $table;
  39. return $this;
  40. }
  41. // 设置默认的字段名称
  42. public function field($field)
  43. {
  44. $this->field = $field;
  45. return $this;
  46. }
  47. // 链式方法: 设置查询数量
  48. public function limit($limit)
  49. {
  50. $this->limit = $limit;
  51. return $this;
  52. }
  53. // 设置查询条件
  54. public function where($where)
  55. {
  56. $this->where = $where;
  57. return $this;
  58. }
  59. // 设置编辑字段
  60. public function set($set)
  61. {
  62. $this->set = $set;
  63. return $this;
  64. }
  65. // 执行查询
  66. public function select()
  67. {
  68. $sql = sprintf('SELECT %s FROM %s WHERE %s LIMIT %s', $this->field, $this->table,$this->where,$this->limit);
  69. return $this->db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  70. }
  71. //执行新增
  72. public function insert()
  73. {
  74. $sql = sprintf('INSERT %s SET %s ', $this->table,$this->set);
  75. return $this->db->query($sql)->rowCount();
  76. }
  77. //执行编辑
  78. public function update()
  79. {
  80. $sql = sprintf('UPDATE %s SET %s WHERE %s', $this->table,$this->set,$this->where);
  81. return $this->db->query($sql)->rowCount();
  82. }
  83. //执行删除
  84. public function delete()
  85. {
  86. $sql = sprintf('DELETE FROM %s WHERE %s', $this->table,$this->where);
  87. return $this->db->query($sql)->rowCount();
  88. }
  89. }
  90. //数据库执行类
  91. class DB {
  92. //静态委托方法
  93. public static function __callStatic($name, $arg)
  94. {
  95. $dsn = 'mysql:host=localhost;dbname=my_user';
  96. $username = 'root';
  97. $password = 'root123';
  98. $query = new Query($dsn, $username, $password);
  99. return call_user_func([$query, $name], ...$arg);
  100. }
  101. }
  102. //查询结果
  103. $res_se = DB::table('mu_user')->field('*')->where("id<5")->limit('2')->select();
  104. var_dump($res_se);
  105. echo "<hr>";
  106. //新增结果
  107. $setstring = "username='狙击手',password='".md5(123456)."',phone='9999999999' ";
  108. $res_in = DB::table('mu_user')->set($setstring )->insert();
  109. echo "当前新增:".$res_in."条";
  110. echo "<hr>";
  111. //编辑结果
  112. $upstring = "username='观察手',password='".md5(123456)."',phone='88888888' ";
  113. $res_up = DB::table('mu_user')->set($upstring )->where("id=17")->update();
  114. echo "当前编辑:".$res_up."条";
  115. echo "<hr>";
  116. //删除结果
  117. $res_de = DB::table('mu_user')->where("id=18")->delete();
  118. echo "当前删除:".$res_de."条";

2.执行后

3.执行前数据库截图

3.执行后数据库截图

二. 实例演示方法拦截器的__get(),__set(),__isset(), __unset()及构造方法__construct()

1.代码部分:

  1. <?php
  2. class Goods
  3. {
  4. private $product;
  5. private $price;
  6. private $payment;
  7. private $press= '';
  8. //构造方法:属于魔术方式,是一种公共方法
  9. public function __construct($product,$price)
  10. {
  11. $this->product = $product;
  12. $this->price = $price;
  13. }
  14. // __get($name): 当外部访问一个不存在或者无权限访问的属性的时候会自动调用
  15. //__get():用于访问调用
  16. public function __get($name)
  17. {
  18. $fun = "get".ucfirst($name);//ucfirst:转首字母大写
  19. // method_exists (对象示例或者类名, 方法名):检查类的方法是否存在于指定的object中
  20. return method_exists($this,$fun) ? $this->$fun() : "暂无数据";
  21. }
  22. private function getInfo()
  23. {
  24. $this->payment = $this->price*0.8;
  25. return mb_substr($this->product,0,6)." , 原价:".$this->price." , 实付:".$this->payment."元";
  26. }
  27. // __set():可以将用户对属性的更新操作进行重定向,可以用于属性设置
  28. public function __set($name, $value)
  29. {
  30. $method = 'set'.ucfirst($name);
  31. return method_exists($this,$method) ? $this->$method($value) : $value;
  32. }
  33. //属性编辑
  34. private function setproduct($value)
  35. {
  36. return $this->product = "<".$value.">";
  37. }
  38. private function setPrice($value)
  39. {
  40. return $this->price = $value;
  41. }
  42. //__isset($name):当类中成员变量(属性)不能外部访问,会自动调用 ,这样可以直接在魔术方法中判断成员变量是否存在,
  43. //当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
  44. public function __isset($name)
  45. {
  46. return isset($this->$name) ;
  47. }
  48. // __unset():删除成员变量(属性)会调用执行删除操作
  49. public function __unset($name)
  50. {
  51. unset($this->$name);
  52. }
  53. }
  54. $goods = new Goods("钢铁是怎么样炼成的",60);
  55. echo $goods->info;
  56. echo "<hr>";
  57. //属性设置
  58. $goods ->product = "百年孤独";
  59. $goods ->price = 100;
  60. //访问
  61. echo $goods->info;
  62. echo "<hr>";
  63. echo (isset($goods->press)==1) ? "存在" : "不存在";
  64. echo "<hr>";
  65. unset($goods->press);
  66. echo (isset($goods->press)==1) ? "存在" : "不存在";

2.执行后效果图:

三.后期静态绑定演示

代码部分:

  1. <?php
  2. class amode
  3. {
  4. public static function index(){
  5. return __METHOD__;
  6. }
  7. public static function info(){
  8. return static::index();
  9. // return new self;报错
  10. // self:总是与当前声明该方法(amode)的类绑定,并不能与调用类(order/order_list)绑定
  11. // static: 后期静态绑定,可以自动与当前方法的调用类进行绑定
  12. }
  13. }
  14. echo amode::info();
  15. echo "<hr>";
  16. class order extends amode
  17. {
  18. }
  19. echo order::info();

效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议