php學習筆記(二)面向物件程式設計
public 公有的:本類,子類,外部物件都可以呼叫
protected 受保護的:本類 子類,可以執行,外部物件不可以呼叫
private 私有的:只能本類執行,子類與外部物件都不可呼叫
面向物件程式設計的三大特點
1)封閉性
封閉性,也可以稱為資訊隱藏。就是將一個類的使用和實現分開,只保留有限的介面(方法)與外部聯絡。對於用到該類的開發人員,只要知道這個類如何使用即可,而不用去關心這個類是如何實現的。這樣做可以讓開發人員更好地把精力集中起來專注別的事情,同時也避免了程式之間的相互依賴而帶來的不便。
2)繼承性
繼承性就是派生類(子類)自動繼承一個或多個基類(父類)中的屬性與方法,並可以重寫或新增新的屬性和方法。繼承這個特性簡化了物件和類的建立,增加了程式碼的可重性。繼承分單繼承和多繼承,PHP所支援的是單繼承,也就是說,一個子類有且只有一個父類。
3)多型性
多型性是指同一個類的不同物件,使用同一個方法可以獲得不同的結果,這種技術稱為多型性。多型性增強了軟體的靈活性和重用性。
類的定義
一個類可以包含有屬於自己的常量,變數(稱為“屬性”)以及函式(稱為“方法”)。
和很多面向物件的語言一樣,PHP也是通過class關鍵字加類名來定義類的。類的格式如下:
<?php
Class myobject{
//……
}
?>
定義:物以類聚,把具有相似特性的物件歸到一個類中,類定義了這些相似物件擁有的相同屬性和方法。類是相似物件的描述,稱為類的定義,是該類物件的藍圖或原型。
類的物件稱為類的一個例項。要建立一個類的例項,必須使用 new
<?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類,為它新增一個成員方法,程式碼如下:
<?php
classmyobject{
function getobjectname($name){
echo "商品名稱為:".$name;
}
}
?>
該方法的作用是輸出商品名稱,商品名稱是通過方法的引數傳進來的。
類是一個抽象的描述,是功能相似的一組物件的集合。如果想用到類中的方法和變數,首先就要把它具體落實到一個實體,也就是物件上。
類常量
既然有變數,當然也會有常量了。常量就是不會改變的量,是一個恆值。眾所周知的一個常量就是圓周率Pi。定義常量使用關鍵字const如:
ConstPI=3.14159;
建構函式
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"
?>