亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 55
粉絲 3
評(píng)論 0
訪問量 69566
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
其它常用魔術(shù)方法與實(shí)戰(zhàn)
王佳祥
原創(chuàng)
749人瀏覽過

其它常用魔術(shù)方法與實(shí)戰(zhàn)

一、sleep()與weakup()

  • __sleep()用serialize關(guān)鍵字序列化時(shí)被自動(dòng)調(diào)用的魔術(shù)方法

  • __wakeup()用unserialize關(guān)鍵字反序列化時(shí)被自動(dòng)調(diào)用的魔術(shù)方法

案例1:

  1. <?php
  2. //序列化
  3. //echo serialize('孫悟空');
  4. //echo serialize([1,2,3,true,null]);
  5. class User
  6. {
  7. public $name = '遙控飛機(jī)';
  8. public $price = 4000;
  9. public $num = 3;
  10. //序列化時(shí)自動(dòng)調(diào)用__sleep()魔術(shù)方法
  11. public function __sleep():array
  12. {
  13. return ['name','price','num'];
  14. }
  15. //反序列化時(shí)自動(dòng)調(diào)用
  16. public function __wakeup()
  17. {
  18. $this->price = 1000;
  19. }
  20. }
  21. $user = new User();
  22. echo serialize($user),'<br>';
  23. //序列化數(shù)據(jù)的目的是將數(shù)據(jù)進(jìn)行傳輸保存
  24. file_put_contents('obj.txt',serialize($user));
  25. $str = file_get_contents('obj.txt');
  26. echo gettype($str).'<br>';
  27. //反序列化
  28. $obj = unserialize($str);
  29. echo gettype($obj).'<br>';
  30. echo $obj->name . ':價(jià)格:' . $obj->price . ',數(shù)量:' , $obj->num;


案例2:

  1. <?php
  2. //__sleep()和__wakeup()實(shí)戰(zhàn)
  3. //自定義數(shù)據(jù)庫(kù)連接類
  4. //功能
  5. //1.類實(shí)例化,自動(dòng)連接數(shù)據(jù)庫(kù),一定會(huì)生成一個(gè):連接對(duì)象
  6. //2.將這個(gè)連接對(duì)象序列化,獲取到連接參數(shù)
  7. //3.反序列化,自動(dòng)重新連接數(shù)據(jù)庫(kù)
  8. //連接類
  9. class Connection
  10. {
  11. //數(shù)據(jù)庫(kù)連接參數(shù)
  12. private $params = [];
  13. //連接對(duì)象
  14. private $link;
  15. //構(gòu)造方法
  16. public function __construct($dsn,$username,$password)
  17. {
  18. //1.連接參數(shù)的初始化
  19. $this->params['dsn'] = $dsn;
  20. $this->params['username'] = $username;
  21. $this->params['password'] = $password;
  22. $this->connect();
  23. //2.連接數(shù)據(jù)庫(kù)
  24. //$this->link = new PDO(...$this->params);
  25. }
  26. //連接數(shù)據(jù)庫(kù)
  27. public function connect()
  28. {
  29. //array_values()把關(guān)聯(lián)數(shù)組轉(zhuǎn)換為索引數(shù)組
  30. $this->link = new PDO(...array_values($this->params));
  31. }
  32. //將這個(gè)連接對(duì)象序列化,獲取到連接參數(shù)
  33. public function __sleep():array
  34. {
  35. return ['params'];
  36. }
  37. //反序列化,自動(dòng)重新連接數(shù)據(jù)庫(kù)
  38. public function __wakeup()
  39. {
  40. $this->connect();
  41. }
  42. public function select($sql)
  43. {
  44. return $this->link->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  45. }
  46. }
  47. $dsn = 'mysql:host=localhost;dbname=tp5';
  48. $username = 'root';
  49. $password = 'wang1111';
  50. $db = new Connection($dsn,$username,$password);
  51. //var_dump($db);
  52. $str = serialize($db);
  53. echo $str.'<hr>';
  54. //print_r(unserialize($str));
  55. print_r($db->select('SELECT * FROM user LIMIT 3'));
  56. echo '<hr>';
  57. //3.反序列化,自動(dòng)重新連接數(shù)據(jù)庫(kù)
  58. $link = unserialize($str);
  59. print_r($link);


二、__toString()

  • __toString() 方法用于一個(gè)類被當(dāng)成字符串輸出時(shí)自動(dòng)調(diào)用該魔術(shù)方法
  1. <?php
  2. //tostring()
  3. class User
  4. {
  5. public function __toString()
  6. {
  7. return 'Hello';
  8. }
  9. }
  10. //將這個(gè)類的實(shí)例,當(dāng)成字符串打印
  11. $user = new User();
  12. echo $user;
  13. class DbException extends PDOException
  14. {
  15. public function __toString()
  16. {
  17. return <<< DBE
  18. <table border="1px">
  19. <tr>
  20. <td>編號(hào)</td>
  21. <td>信息</td>
  22. <td>文件</td>
  23. <td>行號(hào)</td>
  24. </tr>
  25. <tr>
  26. <td>$this->code</td>
  27. <td>$this->message</td>
  28. <td>$this->file</td>
  29. <td>$this->line</td>
  30. </tr>
  31. </table>
  32. DBE;
  33. }
  34. }
  35. try{
  36. $db = new PDO('mysql:host=localhost;dbname=tp5','root','wang11112');
  37. }catch(PDOException $e){
  38. $error = new DbException('連接錯(cuò)誤',1001);
  39. echo $error;
  40. }


三、匿名類

  • 匿名類可以創(chuàng)建一次性的簡(jiǎn)單對(duì)象

  • 可以傳遞參數(shù)到匿名類的構(gòu)造器,也可以擴(kuò)展(extend)其他類、實(shí)現(xiàn)接口(implement interface),以及像其他普通的類一樣使用

  1. <?php
  2. //匿名類的應(yīng)用場(chǎng)景
  3. //1.實(shí)現(xiàn)接口的部分功能
  4. interface iDb
  5. {
  6. public function __construct(...$params);
  7. }
  8. //當(dāng)前這個(gè)接口中的數(shù)據(jù)連接操作應(yīng)該支持PDO,mysqli
  9. //mysqlu實(shí)現(xiàn)
  10. class My_mysqli implements iDb
  11. {
  12. private $db = null;
  13. public function __construct(...$params)
  14. {
  15. $this->db = new mysqli($params[0],$params[1],$params[2],$params[3]);
  16. echo '數(shù)據(jù)庫(kù)連接成功';
  17. }
  18. public function select()
  19. {
  20. return $this->db->query('SELECT * FROM user LIMIT 2')->fetch_all(MYSQLI_ASSOC);
  21. }
  22. }
  23. $mysqli = new My_mysqli('localhost','root','wang1111','tp5');
  24. print_r($mysqli->select());
  25. echo '<hr>';
  26. //匿名類實(shí)現(xiàn)
  27. $users = ( new class ('localhost','root','wang1111','tp5') implements iDb{
  28. private $db = null;
  29. public function __construct(...$params)
  30. {
  31. $this->db = new mysqli($params[0],$params[1],$params[2],$params[3]);
  32. echo '數(shù)據(jù)庫(kù)連接成功';
  33. }
  34. public function select()
  35. {
  36. return $this->db->query('SELECT * FROM user LIMIT 2')->fetch_all(MYSQLI_ASSOC);
  37. }
  38. })->select();
  39. print_r($users);
  40. echo '<hr>';
  41. //用pdo來實(shí)現(xiàn)
  42. class My_pdo implements iDb
  43. {
  44. private $db = null;
  45. public function __construct(...$params)
  46. {
  47. $this->db = new PDO($params[0],$params[1],$params[2]);
  48. echo '數(shù)據(jù)庫(kù)連接成功';
  49. }
  50. public function select()
  51. {
  52. return $this->db->query('SELECT * FROM user LIMIT 1')->fetchAll(PDO::FETCH_ASSOC);
  53. }
  54. }
  55. $mypdo = new My_pdo('mysql:host=localhost;dbname=tp5','root','wang1111');
  56. print_r($mypdo->select());
  57. echo '<hr>';
  58. //用匿名類來實(shí)現(xiàn)
  59. $users2 = ( new class ('mysql:host=localhost;dbname=tp5','root','wang1111') implements iDb{
  60. private $db = null;
  61. public function __construct(...$params)
  62. {
  63. $this->db = new PDO($params[0],$params[1],$params[2]);
  64. echo '數(shù)據(jù)庫(kù)連接成功';
  65. }
  66. public function select()
  67. {
  68. return $this->db->query('SELECT * FROM user LIMIT 2')->fetchAll(PDO::FETCH_ASSOC);
  69. }
  70. })->select();
  71. print_r($users2);
  72. echo '<hr>';


四、學(xué)習(xí)總結(jié)

  • 序列化時(shí)自動(dòng)調(diào)用__sleep()魔術(shù)方法

  • 反序列化時(shí)自動(dòng)調(diào)用__wakeup()魔術(shù)方法

  • 當(dāng)echo一個(gè)實(shí)例化的類時(shí),自動(dòng)調(diào)用__toString()魔術(shù)方法

  • 匿名類,沒有名稱的類,通常賦值給一個(gè)變量

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語(yǔ):
本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)