慕課網--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將字符串反序列化成對象進行使用。