1. 程式人生 > >淺談PHP面向物件程式設計(一)

淺談PHP面向物件程式設計(一)

傳統的面向過程


 

將要完成的工作,分作若干個步驟,或再細分為子步驟,然後後步驟從前往後一步一步完成,最初達致目標。

現代的面向物件


 

將要完成的工作拆分為“一個一個物件”的任務(功能),每個物件獨自完成自己的任務,任務之間的連結通過“呼叫”來實現,最終也完成了整體的工作。

萬事萬物都是物件。

面向物件是設計思想的“昇華”——面向過程是解決簡單問題的自然的思維過程,面向物件是解決大規模的複雜問題的良好思想。

面向物件基本概念

面向物件三大特性:封裝  繼承inherit  多型

 

類與物件

 

抽象與具體

 

張三是一個物件,李四也是一個物件。王五同樣是一個物件。。。。。

 

他們都隸屬於“人”這個“類”(人類),同時我們也可以 說隸屬於“脊椎動物類”,還可以說屬於動物類,甚至生物。

 

 

 

類:是用於描述“某一些具有共同特徵”的物體的概念,是某一類物體的總稱。

 

通常,一個類所具有的共同特徵包括2大方面的資訊:

 

外觀,形狀,描述,資料。。。。。屬性

 

行為,動作,功能。。。。。。。。方法。

 

物件:是指一個具體的“物體”,該物體隸屬於某個“類別”(類)。

 

通常,物件離不開類,沒有類,就不能有物件。

 

一個類的內部可以有3種程式碼:

屬性

方法

類常量

它們統稱為“類中成員”。

下面我們簡單封裝一個類,並例項化物件

複製程式碼
class person{
    /*定義屬性*/
    var $name="";//var是修飾符,也可以用別的修飾
    /*方法*/
    function say($name){
        echo("我叫".$name);
    }
    
}
$p = new person();//例項化物件
$p->name="張三";//給物件屬性賦值
$p->say("張三");//呼叫物件的方法*
複製程式碼

 

$this是一個“偽物件”,代表當前所屬類的當前物件。

 

複製程式碼
/*定義一個人 類 有年齡 姓名屬性  工作的方法*/ 
//class man{
//    public $name;
//    public $sex;
//    public $age;
//    function summary(){
//        echo '我是'.$this->name.',是個'.$this->sex.'生'.',今年'.$this->age.'歲.<br>';
//        //$this指的是當前類的當前物件
//    }
//}
//
//$p1 = new man();//例項化物件
//$p1->name="夏荷";//給物件屬性賦值
//$p1->sex="女";//給物件屬性賦值
//$p1->age="23";//給物件屬性賦值
//$p1->summary();//呼叫物件的方法*/
//
//$p2 = new man();//例項化物件
//$p2->name="萬樹";//給物件屬性賦值
//$p2->sex="男";//給物件屬性賦值
//$p2->age="25";//給物件屬性賦值
//$p2->summary();//呼叫物件的方法*/
複製程式碼

 

 

 

 

靜態屬性 靜態方法 

複製程式碼
//靜態屬性 與 靜態方法
//class union{
//    static $v=10;
//    var $v1=100;
//    
//    static function f1(){
//        echo "這是靜態方法";
//    }
//}
//
//$p =new union();
//$p->v1;//一般屬性的呼叫
//
//echo union::$v;//靜態屬性的呼叫 類名::靜態屬性名
//union::f1();//靜態方法的呼叫 類名::靜態方法名
複製程式碼

 

注意:$this在靜態方法中不能使用 ,靜態方法中也不應呼叫非靜態方法。

構造方法

構造方式是類中的一個“特殊”方法,其作用是在例項化一個物件的同時,給該物件的屬性賦值,使之一建立完成,就具有了其本身的特有資料(屬性值)。

1,該方法名字是固定的,為:__construct();

2,該方法必須是普通方法(不能是靜態方法)

3,通常該方法應該是public

4,通常該方法中使用$this這個關鍵字來對屬性進行賦值

5,當new 類名()的時候,其實是在呼叫該構造方法

6,如果一個類中定義了構造方法,則例項化該類時就會呼叫該方法,且例項化時的引數需要跟構造方法的引數匹配

複製程式碼
//構造方法    _construct
    //普通的我們這樣
//class lemon{
//    var $name="";
//    var $age=0;
//    function info(){
//        echo $this->name.'的年齡是'.$this->age;//如果物件太多 這樣組織起來的話會很麻煩
//    }
//    
//}
//$lisi=new lemon();
//$lisi->name='李四';
//$lisi->age=12;
//$lisi->info();

 //特殊的(運用構造方法)是這樣
//class lemon{
//    var $name="";
//    var $age=0;
//    function __construct($name,$age){//構造方法 例項化物件的時候會自動呼叫 作用是初始化資料
        //$this->name=$name;
        //$this->age=$age;
    //}
//    function info(){
        //echo $this->name.'的年齡是'.$this->age;
    //}
//    
//}
//$hong=new lemon("王小紅","25");
//$hong->info();
複製程式碼

 

 

類的繼承

簡單理解:

某個類A具有某些特徵,另一個類B,也具有A類的所有特徵,並且還可能具有自己的更多的一些特徵,此時,我們就可以實現:B類使用A的特徵資訊並繼續新增自己的一些特有特徵資訊。

父類有的特性子類一定會有,子類有的特性父類不一定有

複製程式碼
class shop_all{
//    var  $lemon=10;
//    function show(){
//        echo $this->lemon;
//    }
//}
//class shop1 extends shop_all{//該句 shoop1 繼承了 shop_all的屬性
//    var $lemon ="66";//如果註釋掉就會找到父類的該屬性輸出10
//    function show(){//如果註釋掉就會找到父類的該屬性輸出10
//        echo "這是show的方法";
//    }    
//}
//$fruit =new shop1();
//echo $fruit->lemon;
//echo $fruit->show();
複製程式碼