php學習筆記(二)面向對象編程

public   公有的:本類,子類,外部對象均可以調用
protected 受保護的:本類 子類,能夠執行,外部對象不能夠調用
private 私有的:只能本類執行,子類與外部對象都不可調用

面向對象編程的三大特色

1)封閉性

封閉性,也能夠稱爲信息隱藏。就是將一個類的使用和實現分開,只保留有限的接口(方法)與外部聯繫。對於用到該類的開發人員,只要知道這個類如何使用便可,而不用去關心這個類是如何實現的。這樣作可讓開發人員更好地把精力集中起來專一別的事情,同時也避免了程序之間的相互依賴而帶來的不便。php

2)繼承性

繼承性就是派生類(子類)自動繼承一個或多個基類(父類)中的屬性與方法,並能夠重寫或添加新的屬性和方法。繼承這個特性簡化了對象和類的建立,增長了代碼的可重性。繼承分單繼承和多繼承,PHP所支持的是單繼承,也就是說,一個子類有且只有一個父類。編程

3)多態性

多態性是指同一個類的不一樣對象,使用同一個方法能夠得到不一樣的結果,這種技術稱爲多態性。多態性加強了軟件的靈活性和重用性。數組

類的定義

一個類能夠包含有屬於本身的常量,變量(稱爲「屬性」)以及函數(稱爲「方法」)。
和不少面向對象的語言同樣,PHP也是經過class關鍵字加類名來定義類的。類的格式以下:函數

<?php
  Class myobject{
    //……
}
?>

定義:物以類聚,把具備類似特性的對象歸到一個類中,類定義了這些類似對象擁有的相同屬性和方法。類是類似對象的描述,稱爲類的定義,是該類對象的藍圖或原型。this

類的對象稱爲類的一個實例。要建立一個類的實例,必須使用 new 關鍵字。
001ZpQGYty6MeYnSNUh25&690spa

<?php
//類的定義以關鍵字class開始,類的命名一般以每一個單詞第一個字母大寫
    class NbaPlayer{
        public $name = "Jordan"; //定義屬性
        public $height = "198cm";
        public $team = "Bull";
        public $playerNumber = "23";
        
        //定義方法
    public function run(){
        echo "Running\n";
    }
    public function dribblr(){
        echo "Dribbling\n";
    }
    public function pass(){
        echo "Passing\n";
    }
}
    //類到對象的實例化
    //類的實例化爲對象時使用關鍵字new,new以後緊跟類的名稱和一對括號
    $jordan = new NbaPlayer();  
    
    //對象中的屬性成員能夠經過"->"符號來訪問
    echo $jordan->name."\n";
    
    //對象中的成員方法能夠經過"->"符號來訪問
    $jordan->dribble();
    $jordan->run();
?>
=> 是數組成員訪問符號

-> 是對象成員訪問符號

成員方法

類中的函數被稱爲成員方法。函數和成員方法惟一的區別就是,函數實現的是某個獨立的功能,而成員方法是實現類中的一個行爲,是類的一部分。
下面就來擴充上面的myobject類,爲它添加一個成員方法,代碼以下:code

<?php
classmyobject{
   function getobjectname($name){
      echo "商品名稱爲:".$name;
   }
}
?>

該方法的做用是輸出商品名稱,商品名稱是經過方法的參數傳進來的。
類是一個抽象的描述,是功能類似的一組對象的集合。若是想用到類中的方法和變量,首先就要把它具體落實到一個實體,也就是對象上。對象

類常量

既然有變量,固然也會有常量了。常量就是不會改變的量,是一個恆值。衆所周知的一個常量就是圓周率Pi。定義常量使用關鍵字const如:blog

<?php
    class Computer{
        const PI = 3.14159;
    }
echo Computer::PI;
?>

雙冒號:: 是用來調用類中靜態的屬性和方法的。繼承

類名 :: 靜態屬性/方法名

構造函數

PHP 5 允行開發者在一個類中定義一個方法做爲構造函數。具備構造函數的類會在每次建立新對象時先調用此方法,因此很是適合在使用對象以前作一些初始化工做。

<?php
//類的定義以關鍵字class開始,類的命名一般以每一個單詞第一個字母大寫
    class NbaPlayer{
        public $name = "Jordan"; //定義屬性
        public $height = "198cm";
        public $team = "Bull";
        public $playerNumber = "23";

        //構造函數,在對象被實例化的時候自動調用
        function __construct($name,$height,$weight,$team){
            echo "It is an  NbaPlayer constructor\n";
            $this->name = $name;
            //$this是PHP裏面的僞變量,表示對象自身。能夠經過$this->的方式訪問對象的屬性和方法
            $this->height = $height;
            $this->weight = $weight;
            $this->team = $team;
        }

        //定義方法
    public function run(){
        echo "Running\n";
    }
    public function dribblr(){
        echo "Dribbling\n";
    }
    public function pass(){
        echo "Passing\n";
    }
}
    //類到對象的實例化
    //類的實例化爲對象時使用關鍵字new,new以後緊跟類的名稱和一對括號
    $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull");    

    //對象中的屬性成員能夠經過"->"符號來訪問
    echo $jordan->name."\n";

    //對象中的成員方法能夠經過"->"符號來訪問
    $jordan->dribble();
    $jordan->run();

    //每一次用new實例化對象的時候,都會用類名後面的參數列表調用構造函數
    $james = new NbaPlayer("James","203cm","120kg","Heat")
    echo $james->name."\n";
?>

析構函數


<?php //類的定義以關鍵字class開始,類的命名一般以每一個單詞第一個字母大寫 class NbaPlayer{ public $name = "Jordan"; //定義屬性 public $height = "198cm"; public $team = "Bull"; public $playerNumber = "23"; //構造函數,在對象被實例化的時候自動調用 function __construct($name,$height,$weight,$team){ echo "It is an NbaPlayer constructor\n"; $this->name = $name; //$this是PHP裏面的僞變量,表示對象自身。能夠經過$this->的方式訪問對象的屬性和方法 $this->height = $height; $this->weight = $weight; $this->team = $team; } //析構函數,在程序執行結束的時候會自動調用 //析構函數一般被用於清理程序使用的資源。好比程序使用了打印機,那麼能夠再析構函數裏面釋放打印機資源 function __destruct(){ echo "Destroying".$this->name."\n"; } //定義方法 public function run(){ echo "Running\n"; } public function dribblr(){ echo "Dribbling\n"; } public function pass(){ echo "Passing\n"; } } //類到對象的實例化 //類的實例化爲對象時使用關鍵字new,new以後緊跟類的名稱和一對括號 $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull"); //對象中的屬性成員能夠經過"->"符號來訪問 echo $jordan->name."\n"; //對象中的成員方法能夠經過"->"符號來訪問 $jordan->dribble(); $jordan->run(); //每一次用new實例化對象的時候,都會用類名後面的參數列表調用構造函數 $james = new NbaPlayer("James","203cm","120kg","Heat") echo $james->name."\n"; //經過把變量設爲null,能夠觸發析構函數的調用 //當對象再也不使用的時候會觸發析構函數 $james = null; echo "from now on James will not be used.\n" ?>

析構函數會在到某個對象的全部引用都被刪除或者當對象被顯式銷燬時執行。

對象的引用

<?php
//類的定義以關鍵字class開始,類的命名一般以每一個單詞第一個字母大寫
    class NbaPlayer{
        public $name = "Jordan"; //定義屬性
        public $height = "198cm";
        public $team = "Bull";
        public $playerNumber = "23";

        //構造函數,在對象被實例化的時候自動調用
        function __construct($name,$height,$weight,$team){
            echo "It is an  NbaPlayer constructor\n";
            $this->name = $name;
            //$this是PHP裏面的僞變量,表示對象自身。能夠經過$this->的方式訪問對象的屬性和方法
            $this->height = $height;
            $this->weight = $weight;
            $this->team = $team;
        }

        //析構函數,在程序執行結束的時候會自動調用
        //析構函數一般被用於清理程序使用的資源。好比程序使用了打印機,那麼能夠再析構函數裏面釋放打印機資源
        function __destruct(){
            echo "Destroying".$this->name."\n";
        }

        //定義方法
    public function run(){
        echo "Running\n";
    }
    public function dribblr(){
        echo "Dribbling\n";
    }
    public function pass(){
        echo "Passing\n";
    }
}
    //類到對象的實例化
    //類的實例化爲對象時使用關鍵字new,new以後緊跟類的名稱和一對括號
    $jordan = new NbaPlayer("Jordan","198cm","98kg","Bull");    

    //對象中的屬性成員能夠經過"->"符號來訪問
    echo $jordan->name."\n";

    //對象中的成員方法能夠經過"->"符號來訪問
    $jordan->dribble();
    $jordan->run();

    //每一次用new實例化對象的時候,都會用類名後面的參數列表調用構造函數
    $james = new NbaPlayer("James","203cm","120kg","Heat")
    echo $james->name."\n";

    //對象的引用用於訪問對象的屬性和方法,$james,$james1和$james2都是對象的引用
    //$james和$james1是對象的兩個獨立引用
    //$james2是$james的影子,使用對象的同一個引用,任何一個賦值爲null至關於刪除了同一個引用
    $james1 = $james;
    $james2 = &$james

    $james = null;
    echo "from now on James will not be used.\n"
?>

靜態類成員

有時候,可能須要建立供全部類實例共享的字段和方法,這些字段和方法與全部的類實
例有關,但不能由任何特定對象調用。

<meta charset="utf-8">
<?php
    class Computer{
        private static $_count = 0;
        public static function run(){
            self::$_count++;//雙冒號和self不能有空格
        }
        public static function getRun(){
            return self::$_count;
        }
    }
    Computer::run();
    echo Computer::getRun();//1
?>
相關文章
相關標籤/搜索