慕課網--PHP進階篇--學習筆記(1)(數組、類與面向對象)

慕課網--PHP進階篇:http://www.imooc.com/learn/26php

---------------------------------------------------------------------數據庫

第1章 數組:設計模式

  一、PHP數組定義數組

    數組就是一個鍵值對組成的語言結構,鍵相似於酒店的房間號,值相似於酒店房間裏存儲的東西。app

  二、數組之索引數組初始化函數

    PHP有兩種數組:索引數組、關聯數組。ui

    索引和關聯兩個詞都是針對數組的鍵而言的。this

    索引數組是指數組的鍵是整數的數組,而且鍵的整數順序是從0開始,依次類推。spa

  三、PHP數組之索引數組賦值設計

    索引數組賦值有三種方式:

    第一種:用數組變量的名字後面跟一箇中括號的方式賦值,固然,索引數組中,中括號內的鍵必定是整數。好比,$arr[0]='蘋果';

    第二種:用array()建立一個空數組,使用=>符號來分隔鍵和值,左側表示鍵,右側表示值。固然,索引數組中,鍵必定是整數。好比,array('0'=>'蘋果');

    第三種:用array()建立一個空數組,直接在數組裏用英文的單引號'或者英文的雙引號"賦值,數組會默認創建從0開始的整數的鍵。好比array('蘋果');這個數組至關於array('0'=>'蘋果');

  四、PHP數組之訪問索引數組內容

    用數組變量的名字後跟的中括號中的鍵,來訪問數組中的值。

  五、PHP數組之for循環訪問索引數組裏的值

    for循環能夠將數組裏的全部值都訪問到,用for循環訪問索引數組裏的值;

  六、PHP數組之foreach循環訪問索引數組裏的值

    foreach循環能夠將數組裏的全部值都訪問到,用foreach循環訪問索引數組裏的值。

  七、PHP數組之關聯數組初始化

    關聯數組是指數組的鍵是字符串的數組。

  八、PHP數組之關聯數組賦值

    第一種:用數組變量的名字後面跟一箇中括號的方式賦值,固然,關聯數組中,中括號內的鍵必定是字符串。好比,$arr['apple']='蘋果';

    第二種:用array()建立一個空數組,使用=>符號來分隔鍵和值,左側表示鍵,右側表示值。固然,關聯數組中,鍵必定是字符串。好比,array('apple'=>'蘋果');

  九、PHP數組之訪問關聯數組內容

    用數組變量的名字後跟中括號+鍵的方式來訪問數組中的值,鍵使用單引號或者雙引號括起來。

    <?php
    //從數組變量$arr中,讀取鍵爲apple的值
    $arr = array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿");
    $arr0 = $arr['apple'];
    if( isset($arr0) ) {print_r($arr0);}
    ?>

  十、PHP數組之foreach循環訪問關聯數組裏的值

    foreach循環能夠將數組裏的全部值都訪問到,用foreach循環訪問關聯數組裏的值。

    <?php
    $fruit=array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿");
    foreach($fruit as $key=>$value){
       echo '<br>鍵是:'.$key.',對應的值是:'.$value;
    }

    ?>

 

第2章 類與面向對象:

  一、PHP類和對象

    類是面向對象程序設計的基本概念,通俗的理解類就是對現實中某一個種類的東西的抽象, 好比汽車能夠抽象爲一個類,汽車擁有名字、輪胎、速度、重量等屬性,能夠有換擋、前進、後退等操做方法。

    一般定義一個汽車類的方法爲:

      class Car {

         $name = '汽車';

         function getName() {

        return $this->name;

        }

       }

    類是一類東西的結構描述,而對象則是一類東西的一個具體實例,例如汽車這個名詞能夠理解爲汽車的總類,但這輛汽車則是一個具體的汽車對象。

    對象經過new關鍵字進行實例化:

    $car = new Car();

    echo $car->getName();

    類與對象看起來比較類似,但實際上有本質的區別,類是抽象的概念,對象是具體的實例。類可使程序具備可重用性。

  二、PHP類和對象之建立一個對象

    類的定義方法,類經過關鍵字class開頭,而後是類名與花括號,在花括號中定義類的屬性與方法。

    類名必須是字母或下劃線開頭,後面緊跟若干個字母、數字或下劃線,類名最好可以表意,能夠採用名詞或者英文單詞。

    //定義一個類

     class Car {

      //定義屬性

      public $name = '汽車';

 

      //定義方法

      public function getName() {

       //方法內部可使用$this僞變量調用對象的屬性或者方法

      return $this->name;

       }

    }

 

    要建立一個類的實例,可使用new關鍵字建立一個對象。

    $car = new Car();
    //也能夠採用變量來建立
    $className = 'Car';
    $car = new $className();

  三、PHP類和對象之類的屬性
    在類中定義的變量稱之爲屬性,一般屬性跟數據庫中的字段有必定的關聯,所以也能夠稱做「字段」。
    屬性聲明是由關鍵字 public,protected 或者 private 開頭,後面跟一個普通的變量聲明來組成。
    屬性的變量能夠設置初始化的默認值,默認值必須是常量。

    訪問控制的關鍵字表明的意義爲:

      public:公開的
      protected:受保護的
      private:私有的

    class Car {

       //定義公共屬性

      public $name = '汽車';

      //定義受保護的屬性

      protected $corlor = '白色';

      //定義私有屬性

      private $price = '100000';

    }

    默認都爲public,外部能夠訪問。通常經過->對象操做符來訪問對象的屬性或者方法,對於靜態屬性則使用::雙冒號進行訪問。當在類成員方法內部調用的時候,可使用$this僞變量調用當前對象的屬性。

    注意:帶有 $ 符號的字段被認爲是變量,而實例化後的對象認爲是一個變量因此使用 $object 這種形式,而屬性在類中能夠看作是一個變量,因此屬性在類中定義的時候須要加上 $ 符,而在對象中,屬性是對象的一部分,因此使用 $object->value 這種形式區分。

 

  四、PHP類和對象之定義類的方法

    方法就是在類中的function,不少時候咱們分不清方法與函數有什麼差異,在面向過程的程序設計中function叫作函數,在面向對象中function則被稱之爲方法。

    同屬性同樣,類的方法也具備public,protected 以及 private 的訪問控制。

    訪問控制的關鍵字表明的意義爲:
      public:公開的
      protected:受保護的
      private:私有的

    能夠這樣定義方法:

      class Car {

        public function getName() {

           return '汽車';

        } ​

      }

      $car = new Car();

      echo $car->getName();

    使用關鍵字static修飾的,稱之爲靜態方法,靜態方法不須要實例化對象,能夠經過類名直接調用,操做符爲雙冒號::。

      class Car {

         public static function getName() {

          return '汽車';

         }

      ​}

      echo Car::getName(); //結果爲「汽車」

  五、PHP類和對象之構造函數和析構函數

    PHP5能夠在類中使用__construct()定義一個構造函數,具備構造函數的類,會在每次對象建立的時候調用該函數,所以經常使用來在對象建立的時候進行一些初始化工做。

      class Car { function __construct() {

        print "構造函數被調用\n";

        }

      }

      $car = new Car();  //實例化的時候 會自動調用構造函數__construct,這裏會輸出一個字符串

    在子類中若是定義了__construct則不會調用父類的__construct,若是須要同時調用父類的構造函數,須要使用parent::__construct()顯式的調用。

      class Car { function __construct() {

         print "父類構造函數被調用\n";

        }

       }

      class Truck extends Car {

         function __construct() {      

           print "子類構造函數被調用\n";  

          parent::__construct();  

         }

      }

      $car = new Truck();

    PHP5支持析構函數,使用__destruct()進行定義,析構函數指的是當某個對象的全部引用被刪除,或者對象被顯式的銷燬時會執行的函數。

      class Car {

         function __construct() {

          print "構造函數被調用 \n";

        }

        function __destruct() {

          print "析構函數被調用 \n";

        }

       }

      $car = new Car(); //實例化時會調用構造函數

      echo '使用後,準備銷燬car對象 \n';

      unset($car); //銷燬時會調用析構函數

    當PHP代碼執行完畢之後,會自動回收與銷燬對象,所以通常狀況下不須要顯式的去銷燬對象。

  六、PHP類和對象之Static靜態關鍵字

    靜態屬性與方法能夠在不實例化類的狀況下調用,直接使用類名::方法名的方式進行調用。靜態屬性不容許對象使用->操做符調用。

      class Car {

        private static $speed = 10;

        public static function getSpeed() {

          return self::$speed;

           }

         }

        echo Car::getSpeed(); //調用靜態方法

    靜態方法也能夠經過變量來進行動態調用:

      $func = 'getSpeed';

      $className = 'Car';

      echo $className::$func(); //動態調用靜態方法

 

    靜態方法中,$this僞變量不容許使用。可使用self,parent,static在內部調用靜態方法與屬性。

      class Car {

         private static $speed = 10;

        public static function getSpeed() {

          return self::$speed;

        }

        public static function speedUp() {

          return self::$speed+=10;

        }

      }

      class BigCar extends Car {

        public static function start() {

          parent::speedUp();

        }

      }

      BigCar::start();

      echo BigCar::getSpeed();

  七、PHP類和對象之訪問控制

    訪問控制經過關鍵字public,protected和private來實現。

    被定義爲公有的類成員能夠在任何地方被訪問。被定義爲受保護的類成員則能夠被其自身以及其子類和父類訪問。被定義爲私有的類成員則只能被其定義所在的類訪問。

    類屬性必須定義爲公有受保護私有之一。爲兼容PHP5之前的版本,若是採用 var 定義,則被視爲公有。

    類中的方法能夠被定義爲公有私有受保護。若是沒有設置這些關鍵字,則該方法默認爲公有

    若是構造函數定義成了私有方法,則不容許直接實例化對象了,這時候通常經過靜態方法進行實例化,在設計模式中會常用這樣的方法來控制對象的建立,好比單例模式只容許有一個全局惟一的對象。

      class Car {

        private function __construct() {

          echo 'object create';

         }

        private static $_object = null;

        public static function getInstance() {

          if (empty(self::$_object)) {

            self::$_object = new Car(); //內部方法能夠調用私有方法,所以這裏能夠建立對象

          }

          return self::$_object;

          }

        }

        //$car = new Car(); //這裏不容許直接實例化對象

        $car = Car::getInstance(); //經過靜態方法來得到一個實例

  八、類和對象之對象繼承

    繼承是面向對象程序設計中經常使用的一個特性,汽車是一個比較大的類,咱們也能夠稱之爲基類,除此以外,汽車還分爲卡車、轎車、東風、寶馬等,由於這些子類具備不少相同的屬性和方法,能夠採用繼承汽車類來共享這些屬性與方法,實現代碼的複用。

  九、PHP類和對象之重載

    PHP中的重載指的是動態的建立屬性與方法,是經過魔術方法來實現的。屬性的重載經過__set,__get,__isset,__unset來分別實現對不存在屬性的賦值、讀取、判斷屬性是否設置、銷燬屬性。

    方法的重載經過__call來實現,當調用不存在的方法的時候,將會轉爲參數調用__call方法,當調用不存在的靜態方法時會使用__callStatic重載。

  十、PHP類和對象之對象的高級特性

    對象比較,當同一個類的兩個實例的全部屬性都相等時,可使用比較運算符==進行判斷,當須要判斷兩個變量是否爲同一個對象的引用時,可使用全等運算符===進行判斷。

    對象複製,在一些特殊狀況下,能夠經過關鍵字clone來複制一個對象,這時__clone方法會被調用,經過這個魔術方法來設置屬性的值。

    對象序列化,能夠經過serialize方法將對象序列化爲字符串,用於存儲或者傳遞數據,而後在須要的時候經過unserialize將字符串反序列化成對象進行使用。

相關文章
相關標籤/搜索