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

搜索
博主信息
博文 17
粉絲 1
評(píng)論 0
訪問量 17751
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
PHP基礎(chǔ): 類的重載和命名空間的部分知識(shí)(聲明, 調(diào)用,分解與合并, 子空間和子空間的調(diào)用)
zl的php學(xué)習(xí)博客
原創(chuàng)
933人瀏覽過

1. 描述類成員重載的原理與實(shí)現(xiàn);

  1. 1.原理: 動(dòng)態(tài)的創(chuàng)建屬性和方法.
  2. 2.實(shí)現(xiàn): 通過魔術(shù)方法[__set,__get,__isset,__unset,__call,__callStatic]來實(shí)現(xiàn).

實(shí)例:

  1. // 實(shí)例:
  2. class Demo1
  3. {
  4. private $overloadData = [];
  5. public $name;
  6. public $email;
  7. public function __construct($name, $email)
  8. {
  9. $this->name = $name;
  10. $this->email = $email;
  11. }
  12. public function getUser(): string
  13. {
  14. return "{$this->name} : {$this->email}";
  15. }
  16. public function insertData($name): string
  17. {
  18. $this->overloadData[$name] = $name;
  19. echo nl2br("創(chuàng)建成功...\n");
  20. return $this->overloadData[$name];
  21. }
  22. // 當(dāng)調(diào)用未設(shè)置的屬性時(shí),會(huì)自動(dòng)調(diào)用
  23. public function __get($name): string
  24. {
  25. if (array_key_exists($name, $this->overloadData)) {
  26. return $this->overloadData[$name];
  27. } else {
  28. echo nl2br("沒有該屬性$name, 嘗試創(chuàng)建中.....\n");
  29. return $this->insertData($name);
  30. }
  31. }
  32. // 當(dāng)對(duì)未設(shè)置的屬性賦值時(shí),會(huì)自動(dòng)調(diào)用
  33. public function __set($name, $value)
  34. {
  35. // echo "$name : $value<br>";
  36. $this->overloadData[$name] = $value;
  37. }
  38. // 當(dāng)對(duì)未設(shè)置的屬性調(diào)用isset()方法并且時(shí),會(huì)自動(dòng)調(diào)用
  39. public function __isset($name): string
  40. {
  41. echo "Is '{$name}' set?\n";
  42. return isset($this->overloadData[$name]);
  43. }
  44. // 當(dāng)對(duì)未設(shè)置的屬性調(diào)用unset()方法并且時(shí),會(huì)自動(dòng)調(diào)用
  45. public function __unset($name)
  46. {
  47. echo "類實(shí)例中沒有 '$name'\n";
  48. unset($this->overloadData[$name]);
  49. }
  50. // 當(dāng)訪問的非靜態(tài)方法不存在時(shí),會(huì)自動(dòng)調(diào)用該方法
  51. public function __call($funcName, $ages)
  52. {
  53. return "函數(shù)名: $funcName, 參數(shù): [" . implode(', ', $ages) . "]";
  54. }
  55. // 當(dāng)訪問的靜態(tài)方法不存在時(shí),會(huì)自動(dòng)調(diào)用該方法
  56. public static function __callStatic($funcName, $ages)
  57. {
  58. return "靜態(tài)函數(shù)名: $funcName, 參數(shù): [" . implode(', ', $ages) . "]";
  59. }
  60. }
  61. $objTest0222 = new Demo1('張三', 'admin@test.com');
  62. echo $objTest0222->name, '<br>';
  63. echo $objTest0222->email, '<br>';
  64. echo $objTest0222->getUser(), '<hr>';
  65. // 調(diào)用沒有創(chuàng)建的屬性
  66. echo $objTest0222->a, '<br>';
  67. echo '<hr>';
  68. // 對(duì)為創(chuàng)建的屬性賦值
  69. $objTest0222->aa = '隨便賦的值';
  70. echo $objTest0222->aa, '<br>';
  71. echo '<hr>';
  72. // 對(duì)未創(chuàng)建的屬性調(diào)用isset或者unset
  73. var_dump(isset($objTest0222->aaa));
  74. unset($objTest0222->aaa);
  75. echo '<hr>';
  76. // 調(diào)用沒有創(chuàng)建的方法時(shí)
  77. // 非靜態(tài)方法
  78. echo $objTest0222->testtest(1,2,3,4,5,6), '<br>';
  79. echo Demo1::testtestStatic(...([6,5,4,3,2,1])), '<br>';

2. 全局成員有哪幾種,有什么特點(diǎn),并實(shí)例演示;

  1. 全局成員: 類, 常量, 函數(shù)
  1. const PATH = '/0222/test2/';
  2. class Test2Demo1
  3. {
  4. //...
  5. }
  6. function test2Demo1()
  7. {
  8. // ....
  9. }

3. 空間的聲明與空間成員的訪問;

  1. // 命名空間的創(chuàng)建由關(guān)鍵值nampspace修飾
  2. namespace ts {
  3. }
  4. // 訪問空間成員
  5. namespace ts1 {
  6. const PATH = '/0222/test2';
  7. class Test2Demo1
  8. {
  9. public function text2Demo1(): string
  10. {
  11. return '我是空間內(nèi)類的函數(shù): ' . __METHOD__;
  12. }
  13. }
  14. function test2Demo1(): string
  15. {
  16. return '我是空間內(nèi)的函數(shù): ' . __FUNCTION__;
  17. }
  18. echo PATH, '<br>'; // 或者 \ts1\PATH 或者 namespace\PATH ,這三種方式訪問都可以
  19. echo (new Test2Demo1())->text2Demo1(), '<br>';
  20. echo test2Demo1(), '<br>';
  21. }

4. 空間成員的分解與合并操作;

空間成員的分解: 當(dāng)一個(gè)空間內(nèi)的代碼過長時(shí),可以把同一個(gè)空間內(nèi)的代碼分解到多個(gè)php腳本文件中.

空間成員的合并: 只要把分解出去的腳本文件在reqire到一個(gè)文件中就實(shí)現(xiàn)了合并.

實(shí)例:

test2-1.php: 主空間

  1. <?php
  2. namespace test2;
  3. require 'test2-2.php';
  4. require 'test2-3.php';
  5. const PATH = '/0222/test2';
  6. // 訪問空間成員
  7. echo PATH, '<br>';
  8. echo (new Test2Demo1())->text2Demo1(), '<br>';
  9. echo test2Demo1(), '<br>';

test2-2.php

  1. <?php
  2. namespace test2;
  3. class Test2Demo1
  4. {
  5. public function text2Demo1(): string
  6. {
  7. return '我是空間內(nèi)類的函數(shù): ' . __METHOD__;
  8. }
  9. }

test2-3.php

  1. <?php
  2. namespace test2;
  3. function test2Demo1(): string
  4. {
  5. return '我是空間內(nèi)的函數(shù): ' . __FUNCTION__;
  6. }

5. 子空間,并在子空間中訪問任何空間中的成員的方式;

子空間: PHP 命名空間允許指定層次化的命名空間的名稱,因此,命名空間的名字可以使用分層次的方式定義

  1. <?php
  2. namespace test3 {
  3. function test31(): string
  4. {
  5. return "我是父級(jí)空間的方法" . __METHOD__;
  6. }
  7. echo "當(dāng)前空間: " . __NAMESPACE__, "<br>";
  8. echo test31(), "<hr>";
  9. echo '------------------調(diào)用下級(jí)空間的成員------------------<br>';
  10. // namespace\test3One\test1() 和 \test3\test3One\test1() 也是一樣的效果
  11. // namespace: 代指當(dāng)前空間,類似于class中的$this和self
  12. echo "test3\\test3One空間的成員: ", test3One\test1(), "<br>";
  13. }
  14. namespace test3\test3One{
  15. function test1(): string
  16. {
  17. return "我是子空間的方法" . __METHOD__;
  18. }
  19. echo "當(dāng)前空間: " . __NAMESPACE__, "<br>";
  20. echo test1(), "<hr>";
  21. echo '------------------調(diào)用下級(jí)空間的成員------------------<br>';
  22. echo "test3\\test3One\\test3Two空間的成員: ", test3Two\test2(), "<br>";
  23. echo '------------------調(diào)用上級(jí)空間的成員------------------<br>';
  24. echo "test3空間的成員: ", \test3\test31(), "<br>";
  25. }
  26. namespace test3\test3One\test3Two{
  27. function test2(): string
  28. {
  29. return "我是子空間的方法" . __METHOD__;
  30. }
  31. echo "當(dāng)前空間: " . __NAMESPACE__, "<br>";
  32. echo test2(), "<hr>";
  33. echo '------------------調(diào)用上級(jí)空間的成員------------------<br>';
  34. echo "test3空間的成員: ", \test3\test31(), "<br>";
  35. echo "test3\\test3One空間的成員: ", \test3\test3One\test1(), "<br>";
  36. }
批改老師:天蓬老師天蓬老師

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

老師批語:
本博文版權(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í)者快速成長!
關(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é)