速戰速決 4 - PHP: 類基礎, 抽象類別, 介面, trait

來源:互聯網
上載者:User
[源碼下載]

速戰速決 (4) - PHP: 類基礎, 抽象類別, 介面, trait


作者:webabcd
介紹
速戰速決 之 PHP

  • 類基礎
  • 抽象類別
  • 介面
  • trait


樣本
1、類的相關知識點 1(基礎)
class/class1.php

php/** * 類的相關知識點 1(基礎) * * 規範:命名空間與目錄路徑對應,類名與檔案名稱對應,檔案以 .class.php 為尾碼名 */class MyClass1{    // 類常量,沒有“$”符號,不能被覆蓋const MyConstant = 'constant value';    // 靜態屬性static$myStaticProperty = "static property";    // 對於屬性和方法的存取控制有 private protected public(預設值)private$_name;    private$_age;    // 建構函式    // PHP 中的魔術方法(magic method)均以 __(兩個底線)開頭(類似的還有 __destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等)function __construct()    {        echo "MyClass1 construct";        echo "
"; // 擷取參數個數$args_num = func_num_args(); if ($args_num == 1) { // $this 代表當前對象,是指向類執行個體的指標$this->_name = func_get_arg(0); } elseif ($args_num == 2) { $this->_name = func_get_arg(0); $this->_age = func_get_arg(1); } else { } } // 解構函式function __destruct() { print "MyClass1 destruct"; echo "
"; } // 建構函式,此種方式在 PHP 5.3.3 或以上可支援 // 此種方式的建構函式也可以當做方法被調用publicfunction MyClass1() { echo "i am not a construct, i am a method"; } // 靜態方法publicstaticfunction myStaticMethod() { return "static method"; } // 方法publicfunction getInfo() { // $this 代表當前對象,是指向類執行個體的指標return "name: " . $this->_name . ", age: " . $this->_age; } // 不直接支援方法的重載(overload),可以通過相關的魔術方法來實現(參見:class3.php) // public function getInfo($name) { } // 帶參數類型約束的方法,類型約束不能用於 int 或 string 之類的標量類型 // 本例約束了參數 $ary 必須是 array 類型publicfunction getFirst(array$ary) { return$ary[0]; }}// 被聲明為 final 的類或屬性或方法,無法繼承// 只能繼承一個類finalclass MyClass2 extends MyClass1{ // 建構函式可以為參數設定預設值(方法或函數也可以為參數設定預設值)function __construct($name = "wanglei", $age = 100) { echo "MyClass2 construct"; echo "
"; // parent 代表當前類的基類 parent::__construct($name, $age); // self 代表當前類 // $this 代表當前對象,是指向類執行個體的指標 } // 解構函式function __destruct() { print "MyClass2 destruct"; echo "
"; parent::__destruct(); } // 覆蓋基類的同名方法(override)publicfunction getInfo() { // $this 代表當前對象,指向類執行個體的指標return "MyClass2 - " . parent::getInfo(); }}// 類的執行個體化$objClass1 = new MyClass1("webabcd", 35);// 通過 -> 調用執行個體方法或執行個體屬性echo$objClass1->getInfo();echo "
";// 通過 -> 調用執行個體方法或執行個體屬性(MyClass1() 是建構函式,也可以當做方法被調用)echo$objClass1->MyClass1();echo "
";$objClass2 = new MyClass2();echo$objClass2->getInfo();echo "
";// instanceof - 用於判斷一個對象是否是指定類的執行個體if($objClass2 instanceof MyClass1){ echo '$objClass2 instanceof MyClass1'; echo "
";}// 通過 :: 調用類常量或靜態屬性或靜態方法echo MyClass1::MyConstant;echo "
";// 通過 :: 調用類常量或靜態屬性或靜態方法echo MyClass1::$myStaticProperty;echo "
";// variable class(可變類),將變數的值作為類名$className = 'MyClass1';// variable method(可變方法),將變數的值作為方法名$methodName = 'myStaticMethod';// 通過 :: 調用類常量或靜態屬性或靜態方法echo$className::$methodName();echo "
";// 調用帶參數類型約束的方法echo$objClass1->getFirst(array("a", "b", "c"));echo "
";


2、類的相關知識點 2(抽象類別,介面,trait)
class/class2.php

php/** * 類的相關知識點 2(抽象類別,介面,trait) */// 抽象類別abstractclass MyAbstractClass{    // 抽象方法,子類必須定義這些方法abstractprotectedfunction getValue1();    abstractpublicfunction getValue2($param1);    // 普通方法(非抽象方法)publicfunction getValue0()    {        return "getValue0";    }}// 介面interface MyInterface1{    // 介面常量,不能被覆蓋const MyConstant = 'constant value';    publicfunction getValue3();}// 介面interface MyInterface2 extends MyInterface1{    publicfunction getValue4();}// 介面interface MyInterface3{    publicfunction getValue5();}// trait(可以 use 多個,允許有實現代碼,但是本身不能執行個體化)trait MyTrait1{    // 可以具有方法,靜態方法,屬性等function getValue6()    {        return "getValue6";    }}// trait(可以 use 多個,允許有實現代碼,但是本身不能執行個體化)trait MyTrait2{    // 抽象方法(use 這個 trait 的類必須要定義這個方法)abstractfunction getValue7();}// trait(可以 use 多個,允許有實現代碼,但是本身不能執行個體化)trait MyTrait3{    function getValue6()    {        return "getValue6";    }    function getValue8()    {        return "getValue8";    }}// 必須實現所有抽象方法和介面方法// 類只能單繼承,介面可以多繼承class MyClass1 extends MyAbstractClass implements MyInterface2, MyInterface3{    // 可以 use 多個 traituse MyTrait1, MyTrait2;    use MyTrait3    {        // 多 trait 間有重名的,可以指定以哪個為準        MyTrait1::getValue6 insteadof MyTrait3;        // 可以為 trait 的指定方法設定別名(調用的時候用方法名也行,用別名也行)        MyTrait3::getValue8 as alias;    }    // 可以將 protected 升級為 publicpublicfunction getValue1()    {        return "getValue1";    }    // 可以加參數,但是加的參數必須要有預設值publicfunction getValue2($param1, $param2 = 'param2')    {        return "getValue2, {$param1}, {$param2}";    }    publicfunction getValue3()    {        return "getValue3";    }    publicfunction getValue4()    {        return "getValue4";    }    publicfunction getValue5()    {        return "getValue5";    }    publicfunction getValue7()    {        return "getValue7";    }}// 調用介面常量echo MyInterface1::MyConstant;echo "
";$myClass1 = new MyClass1;echo$myClass1->getValue0();echo "
";echo$myClass1->getValue1();echo "
";echo$myClass1->getValue2("webabcd");echo "
";echo$myClass1->getValue3();echo "
";echo$myClass1->getValue4();echo "
";echo$myClass1->getValue5();echo "
";echo$myClass1->getValue6();echo "
";echo$myClass1->getValue7();echo "
";echo$myClass1->getValue8();echo "
";echo$myClass1->alias();echo "
";


OK
[源碼下載]

以上就介紹了速戰速決 4 - PHP: 類基礎, 抽象類別, 介面, trait,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.