第二章(物件導向oop)《php和mysql web開發》《php與mysql程式設計》齊讀

來源:互聯網
上載者:User
目錄Table Of Contents

  • 對象
  • 屬性
  • 聲明屬性
  • 調用屬性
  • 屬性範圍
  • 屬性重載
  • 方法
  • abstract範圍
  • 常量
  • 建構函式與解構函式
  • 建構函式
  • 調用父類建構函式
  • 調用無關的建構函式
  • 解構函式
  • 靜態類成員

類表示要在應用程式中處理的實際事物。例如要建立一個管理圖書的應用程式,類就是用來表示書,員工,顧客等,每個實體都包含一組性質和行為,在oop中分別稱為屬性property和方法method

< ?phpclass Employee{    private $name;  //屬性    private $title;    protected $wage;    protected function clockIn() { //方法        echo "Member $this->$name clocked in at ".date("h:i:s");    }    protected function clockOut() {        echo "Member $this->$name clocked out at ".date("h:i:s");    }}?>

對象

類提供了一個基礎,可以在此基礎上建立實體的特定執行個體,稱為對象object,例如一個employee類可以建立員工a和b

< ?php$employee = new Employee();?>

屬性

聲明屬性

< ?phpclass Employee{    private $name;  //聲明屬性的有private,public,protected    private $title;    protected $wage;}?>

調用屬性

調用屬性使用->操作符

< ?phpclass aa{    public $name = 'a';    function test() {        $this->name = $name; //this表示引用當前類    }}?>

屬性範圍

屬性範圍有五種,public,private,protected,final,static

* public是預設的,聲明公用範圍中的屬性,公用屬性可以由相應的對象直接存取和操作,但在oop不鼓勵使用公用屬性,避免被其他人訪問和修改屬性。

* private只能在定義屬性中的類中被訪問,並且不能由其子類使用,因為oop主要原則:封裝,私人屬性必須通過公用介面或者方法來訪問

< ?phpclass aa{    private $name;    public function setName($name) { //通過了公用方法來設定私人屬性        $this->name = $name;    }}$b = new aa;$b->setName("Mary");?>

將屬性的操作封裝在一個方法中,可以讓開發人員可以嚴密地控制如何設定屬性。

  • protected只能在定義屬性中的類中被訪問,並且可以由其子類使用
  • final可以阻止子類覆蓋這個屬性,主要涉及到繼承的時候的屬性覆蓋。
  • static就是static,靜態域,靜態變數,靜態屬性。

屬性重載

屬性重載是通過重載__set和__get方法來實現訪問和修改屬性的時候自動觸發修改。

__set

< ?phpclass Employee{    var $name;    function __set($propName,$propValue){//__set方法有參數屬性名稱和值,所以這裡有2個變數        echo $propName."\n";    }}$employee = new Employee();$employee->name = "Mario"; //當觸發修改屬性的時候,就會觸發__set方法,因為這裡屬性只有name而沒有title,所以$employee->title = "hello";?>-----title //__set執行成功的話會返回true,失敗就返回false,並且會執行函數內的代碼,所以這裡因為沒有title屬性,所以失敗了,並且輸出了失敗的title屬性。

__get

類似__set

因為__set__get的關係,只能處理簡單的屬性,對於複雜的oop應用程式來說還是不足夠的,所以需要實現自己的方法,考慮為每個私人屬性建立兩個方法:

< ?php    class Employee{        private $name;        public function getName(){            return $this->name;        }        public function setName($name){            $this->name = $name;        }    }?>

方法

方法與函數非常相似,只不過方法用來定義類的行為。

php支援6種方法範圍:public,protected,private,abstract,final,static

public,protected,private,final,static跟變數的範圍很相似

abstract範圍

抽象方法,只在父類聲明,但在子類實現,如果想定義一個應用編程介面API,以後將它作為實現的一個模型,就可以聲明一個抽象方法

< ?phpabstract class Employee{    abstract function hire();    abstract function fire();}?>

常量

常量constant,用來表示不會改變的值,在對象的整個生命週期中都保持不變。

< ?phpclass mathFunctions{    const PI = '3.1415926';}echo mathFuctions::PI;  ?>

建構函式與解構函式

建構函式

建構函式是在執行個體初始化的時候自動執行的函數,可以接受參數,可以調用類和方法,可以調用其他建構函式。

< ?php    class Book{        private $title;        private $isbn;        private $copies;        function __construct($isbn) { //這個就是建構函式            $this->setIsbn($isbn); //這裡自動讀取參數,設定書編碼            $this->getTitle(); //自動擷取書title            $this->getNumberCopies(); //自動擷取有多少本相同的書        }        public function setIsbn($isbn) {            $this->isbn = $isbn;  //將參數賦值到類的屬性isbn        }        public function getTitle() {            $this->title = "hello,im a title!";            print ("Title: {$this->title}"."\n");        }        public function getNumberCopies() {            $this->copies = "5";            print ("Number copies available: {$this->copies}"."\n");        }    }    $book = new Book("061452424");?>----Title: hello,im a title!    //直接執行個體就能夠有輸出,自動的。Number copies available: 5

每當執行個體化新對象時都會調用的方法,最好都通過建構函式完成,此外要確保這些方法只能在建構函式中被調用,需要設定private

調用父類建構函式

需要使用parent顯式調用

< ?php    class Employee{        protected $name;        protected $title;        function __construct() {            echo "Employee constructor called!"."\n";        }    }    class Manager extends Employee{        function __construct() {            parent::__construct(); //執行個體Manager對象就能夠執行了Employee對象的建構函式            echo "Manager constructor call!"."\n";        }    }    $employee = new Manager();?>----Employee constructor called!Manager constructor call!

調用無關的建構函式

例如:classname::__constructor();

解構函式

析構就是構造的反義,撤銷對象的在記憶體的資料

< ?php    class Employee{        protected $name;        protected $title;        function __construct() {            echo "Employee constructor called!"."\n";        }        function __destruct() {            echo "Its destroyed!"."\n";        }    }    $employee = new Employee();?>----Employee constructor called!Its destroyed! //指令碼執行結束就會撤銷記憶體中的對象。

靜態類成員

當需要建立供所有類執行個體共用的屬性和方法的時候,這些屬性和方法與所有類執行個體有關,但不能由任何特定對象調用,例如編寫一個類來跟蹤網頁訪問者的數量,正常來的說,每次執行個體化類的時候都會將計數清零,所以需要設定static,靜態類。

< ?phpclass Visitor{    private static $visitor = 0;  //設定了靜態屬性    function __construct() {        self::$visitor++; //靜態屬性和方法需要使用self來引用    }    static function getVistors() {  //設定了靜態方法,其實這裡不用static也可以,靜態方法是可以不用執行個體化而直接調用的,這裡因為建構函式執行個體化了,所以用不用static function都可以        return self::$visitor;    }}$visits = new Visitor();echo $visits::getVistors()."\n"; //靜態方法需要使用::來調用$visits2 = new Visitor();echo $visits2::getVistors()."\n";?>----1   //計數沒有終止,而是繼續累計。2

本文由 PeterYuan 創作,採用 署名-非商業性使用 2.5 中國大陸 進行許可。 轉載、引用前需聯絡作者,並署名作者且註明文章出處。神一樣的少年 » 第二章(物件導向oop)《php和mysql web開發》《php與mysql程式設計》齊讀

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.