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

搜索
博主信息
博文 145
粉絲 7
評論 7
訪問量 198457
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
PHP基礎(chǔ)知識:類相關(guān)總結(jié)和延時綁定和(重載)攔截器
李東亞1??3????12?
原創(chuàng)
956人瀏覽過

抽象類(abstract)、接口類(interface)、trait總結(jié):

一:抽象類(abstract)

1、抽象類必須在class前面加關(guān)鍵abstract,且存在抽象方法(在function前面加abstract);
2、抽象類不能被實列化,只能通過子類來實現(xiàn);子類實現(xiàn)時,必須實現(xiàn)父類中所有的抽象方法;
3、抽象方法中的訪問權(quán)限,在子類中遵循訪問權(quán)限必須大于等于父類(如果父類定義的抽象類為:protected時,子類必須時public);
4、抽象類中的抽象方法不能設(shè)置成私有的:private;

二:接口(interface)

1、接口的關(guān)鍵字:interface;也無法實列化,
2、接口時純粹的模板,只定義功能而不包含實現(xiàn)方法
3、接口中的成員的訪問權(quán)限都是:public;
4、接口中的成員:方法和常量(接口中幾乎很少使用);
5、接口實現(xiàn):可以通過抽象類實現(xiàn)部分方法,但在繼承的工作類中必須全部實現(xiàn);
6、通過implements來繼承接口;可以多繼承以逗號分隔;

三、trait

1、trait是一種特殊類的,無法實例化,只能通過宿主實現(xiàn);像一個函數(shù)(方法)集合;
2、通過use來嵌入宿主;trait之間可以調(diào)用;也可以同時調(diào)用多個trait;use A,B;
3、不同trait中的同名方法可以通過替代insteadOfas別名來區(qū)分使用;
4、trait中的方法可以通過as別名的方法來改變方法的訪問權(quán)限;

四、三者之間的區(qū)別:

1、abstract、interfacetrait三者都不能被實例化;
2、抽象類單繼承,接口可以多繼承,trait可以工作中隨時使用;
3、方法實現(xiàn)遵循的優(yōu)先級:父類<trait<本身;
4、接口中全部為抽象方法;一般不適合寫在接口和抽象類中方法和屬性一般都寫在trait;

代碼練習(xí)

1、代碼

  1. <?php
  2. namespace Test;
  3. class A
  4. {
  5. public static function getClass(){
  6. // 通過關(guān)鍵字static實現(xiàn)靜態(tài)延遲綁定;static與調(diào)用類綁定
  7. return static::class;
  8. }
  9. public static function getC(){
  10. // self代表當(dāng)前類,與定義它的當(dāng)前類綁定
  11. return self::class;
  12. }
  13. }
  14. class B extends A
  15. {
  16. }
  17. echo B::getC();
  18. echo '<br>';
  19. echo A::getC();
  20. echo '<hr>';
  21. echo "靜態(tài)延遲綁定",'<br>';
  22. echo B::getClass();
  23. echo '<br>';
  24. echo A::getClass();
  25. namespace Test1;
  26. class A
  27. {
  28. public static function getClass(){
  29. // 通過關(guān)鍵字static實現(xiàn)靜態(tài)延遲綁定;static與調(diào)用類綁定
  30. return '當(dāng)前的調(diào)用的是'.__METHOD__;
  31. }
  32. public static function getC(){
  33. // self代表當(dāng)前類,與定義它的當(dāng)前類綁定
  34. return static::getClass();
  35. }
  36. }
  37. class B extends A
  38. {
  39. public static function getClass(){
  40. // 通過關(guān)鍵字static實現(xiàn)靜態(tài)延遲綁定;static與調(diào)用類綁定
  41. return '重寫后,當(dāng)前的調(diào)用的是'.__METHOD__;
  42. }
  43. }
  44. echo '<hr>';
  45. echo "靜態(tài)方法重寫",'<br>';
  46. echo B::getC();
  47. echo '<br>';
  48. echo A::getC();
  49. echo '<hr>';
  50. class Php
  51. {
  52. public $name;
  53. protected $city;
  54. private $age=30;
  55. // private $sex;
  56. public function __construct($name,$city){
  57. $this->name=$name;
  58. $this->city=$city;
  59. }
  60. public function write(){
  61. return $this->name."在".$this->city;
  62. }
  63. // 訪問屬性屬性查詢攔截器
  64. public function __get($name)
  65. {
  66. return $this->$name??'沒有'.$name.'屬性';
  67. }
  68. public function __set($name, $value)
  69. {
  70. return $this->$name=$value;
  71. }
  72. public function __isset($protect)
  73. {
  74. return (isset($this->$protect)) ? true : false;
  75. }
  76. public function __unset($protect)
  77. {
  78. return (isset($this->$protect)) ? $this->$protect=null : '無此值';
  79. }
  80. public function __call($name, $arguments)
  81. {
  82. printf('方法名:%s,參數(shù)有:%s',$name,implode(',',$arguments));
  83. }
  84. public function __callStatic($name, $arguments)
  85. {
  86. printf('方法名:%s,參數(shù)有:%s',$name,implode(',',$arguments));
  87. }
  88. }
  89. echo (new Php('ldy','鄭州'))->write();
  90. echo '<br>',"<h3>訪問屬性攔截器:</h3>",'<br>';
  91. echo (new Php('ldy','河南'))->age;
  92. echo '<br>';
  93. echo (new Php('ldy','河南'))->a;
  94. echo '<br>',"<h3>設(shè)置屬性攔截器:</h3>",'<br>';
  95. $obj=new Php('ldy','ly');
  96. $obj->city='洛陽';
  97. echo $obj->write();
  98. echo '<h3>屬性檢測</h3>','<hr>';
  99. echo isset($obj->age)? '有此值':'無此值';
  100. echo '^^^^';
  101. echo isset($obj->aggggg)? '有此值':'無此值';
  102. echo '<h3>屬性銷毀</h3><hr>';
  103. echo $obj->age,'<br>';
  104. unset($obj->age);
  105. echo $obj->age;
  106. echo "<hr><h3>方法攔截器</h3>";
  107. echo $obj->get(1,2,3);
  108. echo "<hr><h3>靜態(tài)方法攔截器</h3>";
  109. echo $obj::get(1,2,3);

2、演示結(jié)果

總結(jié)

1、靜態(tài)方法調(diào)用:self::,parent::,static::; 其中只有static::與調(diào)用類綁定;
2、靜態(tài)方法調(diào)用時;如果不static關(guān)鍵字靜態(tài)綁定的,是子類重寫靜態(tài)方法的是無效的;
3、構(gòu)造器:__construct();析構(gòu)器:__destruct();
4、屬性攔截器:

  1. * __get( $property ) 訪問未定義的屬性時候被調(diào)用
  2. * __set( $property, $value) 給未定義的屬性賦值時被調(diào)用
  3. * __isset( $property ) 給未定義的屬性調(diào)用isset()時候被調(diào)用
  4. * __unset( $property ) 給未定義的屬性調(diào)用unset()的時候被調(diào)用

5、方法攔截器:

  1. * __call( $method, $arg_array ) 調(diào)用未定義的方法時候被調(diào)用
  2. * __callStatic( $method, $arg_array ) 調(diào)用未定義的靜態(tài)方法時候被調(diào)用
批改老師:天蓬老師天蓬老師

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

老師批語:接口常量, 在配置異常處理器, 和一些系統(tǒng)參數(shù)中, 使用的非常多, 因為它比類常量要好用.只是目前大家還用不上而已
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

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

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