<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之旅 廣告
                類中的七種語法說明 -屬性 -靜態屬性 -方法 -靜態方法 -類常量 -構造函數 -析構函數 一些基本概念: **類**? 定義了一件事物的抽象特點。類的定義包含了數據的形式以及對數據的操作 **對象**? 是類的實例 類創建后,我們可以使用**new**運算符來實例化該類的對像 ``` 兩種寫法 $test=new \Test(); 等同于 $test=new \Test; ``` 類的變量使用**var**來聲明 var $tyy 一.## 訪問控制 PHP 對屬性或方法的訪問控制,是通過在前面添加關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。 * **public(公有):**公有的類成員可以在任何地方被訪問。 * **protected(受保護):**受保護的類成員則可以被其自身以及其子類和父類訪問。 * **private(私有):**私有的類成員則只能被其定義所在的類訪問。 注意:類屬性必須定義為公有,受保護,私有之一。如果用 var 定義,則被視為公有 注意:類中的方法可以被定義為公有,私有或受保護。如果沒有設置這些關鍵字,則該方法默認為公有。例如: ``` function test(){ echo 11; } 這是public的 ``` 注意:父類的protected方法只能在子類中被調用,不能通過實例化子類去執行父類protected方法 二. 常量 可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時候不需要使用 $ 符號。 常量的值必須是一個定值,不能是變量,類屬性,數學運算的結果或函數調用。 ~~~ <?php class MyClass { const constant = '常量值'; function showConstant() { echo self::constant . PHP_EOL; } } echo MyClass::constant . PHP_EOL; ~~~ 三.類的繼承與創建 1.基類與派生類叫法:基類就是父類,派生類就是子類 2.PHP 使用關鍵字**extends**來繼承一個類,PHP 不支持多繼承 3.如果父類中有一個無參的構造函數,那么子類就隱式調用父類默認的無 參的構造函數base():, 否則顯示調用父類有參的構造函數base(參數 名)。 4.子類默認繼承父類所有的 public 和 protected 方法,但不繼承 private 方法和屬性 5.繼承的特性 傳遞性:子類可以調用父類以及父類以上所有父類的屬性和方法 單根性:一個子類不能同時繼承2個或2個以上的父類 注意: 子類繼承父類的屬性和方法,也就是說子類擁有父類所有的東西,包括 public(公有)、protected(保護)和private(私有)的。但是父類私有的屬性和方法不能讓子類直接調用,并不是說沒有繼承過來,而是繼承過來了,但是要調用父類的私有屬性和方法的話還是需要通過父類的 public、protected 方法調用 四.## 抽象類 (1)抽象類是指在 class 前加了 abstract 關鍵字且存在抽象方法(在類方法 function 關鍵字前加了 abstract 關鍵字)的類 (2)定義為抽象的類不能被實例化。 (3)被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現。 (4)繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更為寬松)。例如某個抽象方法被聲明為受保護的,那么子類中實現的方法就應該聲明為受保護的或者公有的,而不能定義為私有的。 (5)如果子類需要實例化,前提是它實現了抽象類中的所有抽象方法。如果子類沒有全部實現抽象類中的所有抽象方法,那么該子類也是一個抽象類,必須在 class 前面加上 abstract 關鍵字,并且不能被實例化 ~~~ <?php abstract class AbstractClass { // 強制要求子類定義這些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') . PHP_EOL; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') . PHP_EOL; ?> ~~~ 五.parent 關鍵字 parent 關鍵字可以在任何復寫父類方法的方法中使用,通過在當前對象中調用父類的方法來拓展父類的功能 ,可以調用父類靜態屬性和靜態方法和構造函數及一般方法 parent只能調用父類的public與protected方法及靜態成員,調用private私有的方法會報錯,調用非靜態屬性會報錯 parent:: __construct()表示調用父類構造方法 六.## Static 關鍵字 聲明類屬性或方法為 static(靜態),就可以不實例化類而直接訪問。 靜態屬性不能通過一個類已實例化的對象來訪問(但靜態方法可以)。 由于靜態方法不需要通過對象即可調用,所以偽變量 $this 在靜態方法中不可用。 靜態屬性不可以由對象通過 -> 操作符來訪問。 重點總結: 對象可以調用屬性和靜態屬性,類只能調用靜態屬性。 對象可以調用方法和靜態方法,類可以調用方法和靜態方法。 ``` // 實例化類對象 ??$object = new Student('Tom'); ??// 對象調用屬性 ??echo $object->stu\_name ??// 對象調用靜態屬性 ??echo $object::$stu\_num ??// 類調用靜態屬性 ??echo Student::$stu\_num,' ??// 使用對象分別調用方法和靜態方法 ??$object->stuFunction(); ??$object->static\_stuFunction(); ??$object::stuFunction(); ??$object::static\_stuFunction(); ??// 使用類分別調用方法和靜態方法 ??Student::stuFunction(); ??Student::static\_stuFunction(); ??// 類調用類常量 ??echo Student::STUDENT ``` 七.## 構造函數和## 析構函數 構造函數是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變量賦初始值,在創建對象的語句中與new運算符一起使用。 ~~~ function __construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; } ~~~ 析構函數(destructor) 與構造函數相反,當對象結束其生命周期時(例如對象所在的函數已調用完畢),系統自動執行析構函數。 ~~~ function __destruct() { print "銷毀 " . $this->name . "\n"; } ~~~ 注意: 只有當類被實例化的時候才會執行構造函數與析構函數,類的成員被靜態調用時不會被執行 ``` class Car{ public static $a=45; public function __destruct(){ self::$a=55; } public static function pay(){ return self::$a; } } echo \Car::$a; echo (new \Car)::$a; 分別是45,55 ``` 八.## Final 關鍵字 如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承
                  <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>

                              哎呀哎呀视频在线观看