<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] >[success]早期編程由于受電腦硬件限制,程序都是追求效率,而忽略可理解性,擴充性,隨著硬件技術的發展,編程越來越重視多人開發,程序員越來越重視程序的可靠性,可擴展性,可維護性,所以刺激了程序語言的發展 **面向過程** 程序員設計好程序代碼流程圖,輔助程序設計。優點:用什么功能就編寫什么函數 缺點:數據管理上比較混亂,主要集中在函數成面上,面向對象把屬性和方法進行封裝,更好的可重用性和可擴展性 **面向對象** 萬物皆對象,將構成問題的事務分解到各個對象上,建立對象的目的不是為了完成一個工作,而是為了描述某個事務在解決問題中的行為,更符合人的思維習慣,代碼重用性高,可擴展性好 在面向對象的程序設計(英語:Object-oriented programming,縮寫:OOP)中,對象是一個由信息及對信息進行處理的描述所組成的整體,是對現實世界的抽象。 在現實世界里我們所面對的事情都是對象,如計算機、電視機、自行車等。 **對象的主要三個特性** 1. 對象的行為:可以對 對象施加那些操作,開燈,關燈就是行為。 2. 對象的形態:當施加那些方法是對象如何響應,顏色,尺寸,外型。 3. 對象的表示:對象的表示就相當于身份證,具體區分在相同的行為與狀態下有什么不同。 比如 Animal(動物) 是一個抽象類,我們可以具體到一只狗跟一只羊,而狗跟羊就是具體的對象,他們有顏色屬性,可以寫,可以跑等行為狀態。 ![](https://box.kancloud.cn/e95e57de4645628586652740d44ae768_445x388.png) 注意:對象可以理解為有屬性和方法的特殊數據類型。(屬性與方法的集合體,通常由類的實例化產生) ## 類的概念 是一種抽象的概念,是具有相同語義定義對象的集合(具有相同屬性和方法的集體),使用具體的類是不可行的,只能實例化。拿汽車為例,汽車的設計圖紙就是類,汽車是對象。設計中重點是類的創建 ### 類名書寫規范 類名首字母大寫, 一個類定義在一個文件中,并以.class.php做為文件名結尾 ![](https://box.kancloud.cn/5ddd503762dca3d4d9e2f72ec1194de1_942x745.jpg) ~~~ <?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?> ~~~ ### 對象的產生 實例化類,產生對象,步驟: 在內容中開辟出對象的空間 執行構造方法 將對象的引用地址返回 #### 對象句柄 用于區分不同對象。對象創建后,在內存中獲取一塊存儲空間,儲存空間的地址就是對象的標識或句柄 #### 屬性 在類中定義的變量,即為成員屬性,用于描述對象靜態特性的數據。 如人的姓名,性別,首字母小寫 #### 方法 函數定義在類中即為成員方法,用于描述對象動態特性的操作行為,方法名不區分大小寫,不可重名,首字母小寫 #### 對象的生命周期 創建后,生命周期開始,當程序結束后或程序員清除對象后即銷毀,PHP會自動銷毀對象 ~~~ <?php class Site { /* 成員變量 */ var $url; var $title; /* 成員函數 */ function setUrl($par){ $this->url = $par; } function getUrl(){ echo $this->url . PHP_EOL; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title . PHP_EOL; } } $runoob = new Site; $taobao = new Site; $google = new Site; // 調用成員函數,設置標題和URL $runoob->setTitle( "菜鳥教程" ); $taobao->setTitle( "淘寶" ); $google->setTitle( "Google 搜索" ); $runoob->setUrl( "www.runoob.com" ); $taobao->setUrl( "www.taobao.com" ); $google->setUrl( "www.google.com" ); // 調用成員函數,獲取標題和URL $runoob->getTitle(); $taobao->getTitle(); $google->getTitle(); $runoob->getUrl(); $taobao->getUrl(); $google->getUrl(); ?> ~~~ ## 構造方法&析構方法 ### 構造方法__construct() 在創建對象時自動執行,沒有返回值,用于執行類的一些初始化工作,如對象屬性的初始化工作,PHP4中構造方法必須與類同名,php5中規定構造方法為construct(),優點是不受類名的影響,如果不存在__construct php搜索與類同名的方法自動執行。 ### 析構方法__destruct() 用于對象在內存中被銷毀時自動執行的方法,不帶任何參數 ## 繼承 可以使一個類繼承并擁有另一個已經存在類的成員屬性和方法,被繼承的類稱為父類或基類,繼承類為子類。extends關鍵字實現繼承關系。(PHP 不支持多繼承) ~~~ <?php // 子類擴展站點類別 class Child_Site extends Site { var $category; function setCate($par){ $this->category = $par; } function getCate(){ echo $this->category . PHP_EOL; } } ~~~ ## 方法重寫 如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。 ## 訪問控制 PHP 對屬性或方法的訪問控制,是通過在前面添加關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。 1. public(公有):公有的類成員可以在任何地方被訪問。 2. protected(受保護):受保護的類成員則可以被其自身以及其子類和父類訪問。 3. private(私有):私有的類成員則只能被其定義所在的類訪問。 ## Static 關鍵字 需要一個數據對象只服務于類,即類內部可用,對外不可用時。建對象是極其耗費資源的,因此當一個方法具有比較強的公用性的時候, 沒有必要為了調用這個方法而重新再生成該類的實例。定義的方法或變量在程序第一次加載時即駐留內存,程序結束釋放。靜態方法不能被非靜態方法重寫,構造方法不允許聲明為static的 ### static變量 通過static聲明的成員變量為靜態變量,是該類的公共變量,在第一次使用時即生成,對于該類的所有對象只有一份,是 屬于類的,不是屬于對象的。static變量是屬于類而不屬于對象,可以在任何地方通地類來訪問,是類的全局變量,類創建時即存入 內存。對多個對象來說,靜態數據成員只存儲一處,可以節省內存。只要對靜態數據成員的值更新一次,保證所有對象存取更新后的相同的值。 ### static方法 用static聲明的方法為靜態方法,執行該方法時不會將對象引用傳給函數,所以我們不能訪問非靜態成員,只能訪問靜態 方法或靜態變量。使用時不用生成對象即可執行 ~~~ <?php class Foo { public static $my_static = "foo"; public function staticValue() { return self::$my_static; } } print Foo::$my_static . PHP_EOL; $foo = new Foo(); print $foo->staticValue() . PHP_EOL; ?> ~~~ ## 方法調用 ### $this 是當前對象的引用,一般出現在方法里,用于獲取類的成員屬性,或執行類的成員方法 ### self:: 對本類的引用 ,用于獲取當前類的靜態成員屬性或靜態成員方法 self::run() ### parent:: 對父類的引用,調用父類的方法或屬性。 ## 抽象類 具有抽象方法的類為抽象類,抽象方法即為沒有內容的空方法,要求子類 進行完善內容,抽象類不能實例化,只能繼承,通過extends來實現,抽 象類中也可以定義普通方法,父類方法執行方式不確定,但子類還都有這個方法。 例如:定義動物類,每個動物都有叫聲方法,但是表面不同,所以要 定義為抽象類,讓每種動物類去實現功能。 當父類為抽象類時,子類必須重寫父類的抽象方法抽象類里不一定非要寫抽象方法,但有抽象方法的類必須定義為抽象類,抽象類必須繼承使用抽象方法不能有主體即{} ~~~ <?php abstract class AbstractClass { // 強制要求子類定義這些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue(); } } /** * 子類-繼承了抽象類 */ class Car extends AbstractClass { protected function getValue(){ } protected function prefixValue($prefix){ } } ?> ~~~ ## 接口 使用接口(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。接口是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。接口中定義的所有方法都必須是公有,這是接口的特性。要實現一個接口,使用 implements 操作符。類中必須實現接口中定義的所有方法,否則會報一個致命錯誤。類可以實現多個接口,用逗號來分隔多個接口的名稱。 ~~~ <?php interface DbInterface { public function connectDb(); //獲得連接 public function close(); //關閉數據庫 public function exe($sql); //發送沒有返回值的sql public function query($sql); //有返回值的sql } class Db implements DbInterface { public function exe($sql){ } public function query($sql{ } } ?> ~~~ **接口與抽象類的區別:** 1. 接口只能用implements實現 抽象類用extends繼承實現 2. 接口中不可以有成員方法,抽象類可以有成員方法 3. 接口沒有構造函數,抽象類可以定義構造函數 4. 接口方法都是public 抽象類方法可以用protected private public來修飾 5. 一個類可以實現多個接口,但只能繼承一個抽象類 ## 魔術常量 <table> <caption> <strong> 幾個 PHP 的“魔術常量” </strong> </caption> <thead> <tr> <th> 名稱 </th> <th> 說明 </th> </tr> </thead> <tbody> <tr> <td> <strong> <code class=" language-php"><span class="token constant">__LINE__</span></code> </strong> </td> <td> 文件中的當前行號。 </td> </tr> <tr> <td> <strong> <code class=" language-php"><span class="token constant">__FILE__</span></code> </strong> </td> <td> 文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。自 PHP 4.0.2 起, <strong> <code class=" language-php"><span class="token constant">__FILE__</span></code> </strong> 總是包含一個絕對路徑(如果是符號連接,則是解析后的絕對路徑),而在此之前的版本有時會包含一個相對路徑。 </td> </tr> <tr> <td> <strong> <code class=" language-php"><span class="token constant">__DIR__</span></code> </strong> </td> <td> 文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。它等價于 <em> dirname(__FILE__) </em> 。除非是根目錄,否則目錄中名不包括末尾的斜杠。(PHP 5.3.0中新增) = </td> </tr> <tr> <td> <strong> <code class=" language-php"><span class="token constant">__CLASS__</span></code> </strong> </td> <td> 類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用區域(例如 <em> Foo\Bar </em> )。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。 </td> </tr> <tr> <td> <strong> <code class=" language-php"><span class="token constant">__METHOD__</span></code> </strong> </td> <td> 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 </td> </tr> </tbody> </table> ## 魔術方法 <table> <thead> <tr> <th> 名稱 </th> <th> 說明 </th> </tr> </thead> <tbody> <tr> <td><code class=" language-php"><span class="token function">__isset<span class="token punctuation">(</span></span><span class="token punctuation">)</span></code></td> <td>檢測對象里面的私有成員屬性是否存在</td> </tr> <tr> <td><code class=" language-php"><span class="token function">__unset<span class="token punctuation">(</span></span><span class="token punctuation">)</span></code></td> <td>是個共有的方法,用來刪除對象里的私有成員屬性</td> </tr> <tr> <td><code class=" language-php"><span class="token function">__get<span class="token punctuation">(</span></span><span class="token punctuation">)</span></code></td> <td>獲取對象未定義的屬性時,自動運行的魔術函數</td> </tr> <tr> <td><code class=" language-php"><span class="token function">__set<span class="token punctuation">(</span></span><span class="token punctuation">)</span></code></td> <td>給未定義的屬性賦值時,自動運行的魔術函數。可以將set設置的未定義屬性存到類的數組類型成員屬性,get時再找相應變量索引</td> </tr> <tr> <td><code class=" language-php"><span class="token function">__call<span class="token punctuation">(</span></span><span class="token punctuation">)</span></code></td> <td>調用一個未定義的方法時,自動執行的魔術函數,2個參數 1方法名 2參數數組</td> </tr> <tr> <td><code class=" language-php"><span class="token function">__autoload<span class="token punctuation">(</span></span><span class="token variable">$className</span><span class="token punctuation">)</span></code></td> <td>引用一個類時自動執行的函數,可以讀入類文件,可以通過 spl_autoload_register(array('a','run')); 來指定新的魔術函數。</td> </tr> </tbody> </table> >[danger] 練習:通過面向對象思想實現文件上傳類Upload.class.php
                  <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>

                              哎呀哎呀视频在线观看