<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 抽象類 某個類是其他類的父類,但本身不希望實例化的父類,主要用途:提出子類的屬性,讓子類去繼承,這樣可以達到代碼復用,同時利于項目設計者來設計類 安排不同的程序員寫不同的子類 比如:交通工具類,動物類 ~~~ abstract class Animal{ abstract public function cry();//讓子類去實現它 } $animal=new Animal();//我們并不希望實例化動物這個類 ~~~ ## 定義: abstract 類名 抽象類 abstract 方法 抽象方法,就不能實現它,不能有方法體。 ## 特點: 抽象類不能被實例化。 抽象類可以沒有abstract, 抽象類可以沒有抽象方法,可以有正常方法——即可以確定的方法先定下來 抽象方法不能有方法體,方法體在子類實現 一旦一個類有abstract方法,這個類必須聲明為abstract類 繼承的類,需要實現父抽象類的所有抽象方法 ~~~ abstract class A{ public $name="abc"; public function getName(){ return $this->name; } abstract function test(); abstract function test1(); } class B extends A{ function test(){ echo "我實現A:test()"; } //必須全部實現A中的抽象方法 function test1(){ echo "我實現A:test()"; } echo "hello"; } ~~~ ## 接口 interface 類名{ } **實現接口:class 子類 inplements 接口1,接口2,接口3{ }** 什么情況下使用接口: 1. 項目經理定規范 2. 定規范,讓別的程序員實現 3. 有多個類之間是平級的,都要實現某個功能,只是實現的方式不一樣 注意: 1. 接口中可以有屬性,但必須是public ,必須是常量 const A=90; echo iusb::A; ![](https://box.kancloud.cn/f10e7902110202f65f1560b242e361af_363x217.png) 2. 接口中的方法必須都是public默認 3. 一個類可以實現多個接口,逗號隔開 4. 一個接口不能繼承其他的類,但是可以繼承別的接口 5. 繼承的同時,再去實現接口 class A extends B inplements C{.....} interface iusb{ //定義一些方法,供其他類來實現,接口里面都不能有方法體 public function start(); public function stop(); } //編寫相機類,讓他去實現接口,改類必須實現這個接口的所有方法 class camera inplements iusb{ public function start(){ echo "相機開始工作"; } public function stop(){ echo "相機停止工作"; } } ~~~ interface stumanageinterface{ public function add($stu); public function del($id); public function update($stu); } class stumanage inplements stumanageinterface{ public function add($stu){ echo "增加學生"; } public function del($id){ echo "刪除學生"; } public function update($stu){ echo "修改學生"; } } ~~~ ## 繼承與實現的比較 ![](https://box.kancloud.cn/b5190d14dff773903286dc4fd70cc8b1_487x240.png) 1. 繼承保證功能的純潔性,接口是對單一繼承類功能的一種補充 2. 多層繼承不靈活,一層出問題,都會出問題; 接口沒有層級問題,可以在不打破繼承關系的前提下,對某個類功能擴展 ![](https://box.kancloud.cn/5087a9dbb272fc4bc4676c1eb85c5b72_789x363.png) ## final關鍵字 1. 如果一個類為final,只希望自己用(安全性考慮),任何類無法繼承 final class A{ } 2. 如果某個方法,(如個人所得稅),不希望被重寫,這個方法前final——可以繼承,但不能修改 3. final關鍵字不能修飾屬性 ~~~ class A{ final public function getRate($salary){ return $salary*0.08; } } class B extends A{ //以下無法實現重寫 public function getRate($sal){ return $salary*0.01; } } $b=new B(); echo $b->getRate(1000); ~~~ ## const常量定義 不希望成員變量被修改,就用const,const不能有修飾符 const 常量名=值; 訪問: 外部:**類名::常量名;或 接口名::常量** 內部:類名::常量名 或self::常量名 常量屬于類的,不屬于對象的 ![](https://box.kancloud.cn/bb9d6acf290a6d672291d95f0369b71c_626x309.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看