国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

物件導(dǎo)向

?物件導(dǎo)向程式設(shè)計(Object Oriented Programming, OOP, 物件導(dǎo)向程式設(shè)計)是一種電腦程式架構(gòu),OOP的一個基本原則是電腦程式是由單一能夠扮演子程式的單元或物件組合而成, OOP達到了軟體工程的三個目標(biāo):重複使用性、靈活性和擴展性。為了實現(xiàn)整體運算,每個物件都能夠接收訊息、處理資料和向其它物件發(fā)送訊息。物件導(dǎo)向一直是軟體開發(fā)領(lǐng)域內(nèi)比較熱門的話 題,首先,物件導(dǎo)向符合人類看待事物的一般規(guī)律。其次,採用物件導(dǎo)向方法可以使系統(tǒng)各部分各司其職、各盡所能。為程式設(shè)計人員敞開了一扇大門,使其編程的程式碼 更簡潔、更易於維護,並且具有更強的可重用性。有人說PHP不是真正的物件導(dǎo)向的語言,這是事實。 PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統(tǒng)的流程程式設(shè)計。然而,對於大型項目,你可能需要在PHP 中使用純的OOP去聲明類,而且在你的專案裡只用物件和類別。這個概念我先不多說了,因為有很多人朋友遠離物件導(dǎo)向程式設(shè)計的主要原因就是一接觸物件導(dǎo)向概念的時候就理解不上去, 所以就不想去學(xué)下去了. 等讀者看完整體內(nèi)容後再去把概念搞明白吧。

?????? 為學(xué)習(xí)物件導(dǎo)向,那我們就先來了解什麼面向過程。

面向過程

「以過程為導(dǎo)向」(Procedure Oriented)是一種以過程為中心的程式設(shè)計思想。 「面向過程」也可稱之為「以記錄」為導(dǎo)向思想,他們不支援豐富的「物件導(dǎo)向」特性(例如繼承、多型),而且它們不允許混合持久化狀態(tài)和領(lǐng)域邏輯。

就是分析出解決問題所需的步驟,然後用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依序呼叫就可以了。

?

以過程為導(dǎo)向的重要優(yōu)勢

  • #可讀性

  • ##可重用性

  • 維護性

  • 可測試性

  • ##面向流程就是分析出解決問題所需的步驟,然後用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依序呼叫就可以了。

物件導(dǎo)向是把構(gòu)成問題事務(wù)分解成各個對象,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

例如下面的範(fàn)例


?

#

可以明顯看出,物件導(dǎo)向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設(shè)計中分散在了總多步驟中,很可能出現(xiàn)不同的繪製版本,因為通常設(shè)計人員會考慮到實際情況進行各種各樣的簡化。而物件導(dǎo)向的設(shè)計中,繪圖只可能在棋盤物件中出現(xiàn),從而保證了繪圖的統(tǒng)一.

類別與物件的關(guān)係

物件:物件是人們要進行研究的任何事物,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計劃或事件。物件具有狀態(tài),一個物件用資料值來描述它的狀態(tài)。物件還有操作,用來改變物件的狀態(tài),物件及其操作就是物件的行為。物件實現(xiàn)了資料和操作的結(jié)合,使資料和操作封裝於物件的統(tǒng)一體中。

?

類別:具有相同特性(資料元素)和行為(功能)的物件的抽象就是類別。因此,對象的抽像是類,類的具體化就是對象,也可以說類的實例是對象,類其實就是一種資料型態(tài)。類別具有屬性,它是物件的狀態(tài)的抽象,用資料結(jié)構(gòu)來描述類別的屬性。類別具有操作,它是物件的行為的抽象,用操作名和實現(xiàn)該操作的方法來描述。

對象與類別的關(guān)係:

類別與對象的關(guān)係就如模具和鑄件的關(guān)係,類別的實力化的結(jié)果就是對象,而對對象的抽象就是類,類別描述了一組具有相同特性(屬性)和相同行為的物件。

php類別的成員屬性和成員方法

#類別定義的方法

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>
<?php
    class boy{
         
        var $name ="jw";
        var $age = "21";        
        var $sex = "男";        
        var $height = "182CM";        
        var $eye = "big";        //函數(shù)(成員方法)       
         function zuofan(){            
         return "做飯<br>";        }       
          function jiawu(){            
          return "家務(wù)<br>";        }
          };
?>


註:在類別的成員屬性面前一定要有一個修飾詞,如果不是知道使用聲明修飾詞,可以使用var(關(guān)鍵字),如果一旦有其他的修飾詞就不要用var了
注意:成員屬性不可以是帶運算子的表達式.變數(shù).方法或函數(shù)呼叫。聲明的成員方法必須和物件相關(guān),不能是一些沒有意義的操作。

?

?

#實例化物件

類別的實例化格式如下:

$物件名稱= new 類別名稱([參數(shù)]);??????? // 類別的實例化:類別成為物件的語句

?

·???????類別實例化傳回的物件名稱,用於引用類別中的方法。

·???????? new:關(guān)鍵字,表示建立一個新的物件。

·???????? 類別名稱:表示類別的名稱。

·???????? 參數(shù):指定類別的建構(gòu)方法用於初始化類別的值。如果類別中沒有定義建構(gòu)函數(shù),PHP會自動建立一個不帶參數(shù)的預(yù)設(shè)建構(gòu)函數(shù)。

new.php裡提供的原始碼,能清楚的看出如何實例化對象,並且存取。

<?php
class boy{
    //變量(成員屬性)    
    var $name ="jw";    
    var $age = "21";    
    var $sex = "男";    
    var $height = "182CM";   
    var $eye = "big";    
    //函數(shù)(成員方法)    
    function zuofan(){       
     return "做飯<br>";    }    
     function jiawu(){        
     return "家務(wù)<br>";    }
     }
     $boy1 = new boy();
     $boy1->name = "張三";
     $boy2 = new boy();
     $boy2 ->name = "李四";
     echo $boy1 -> sex."<br>";
     echo $boy2 -> height."<br>";
?>

-> 符號? 代表存取物件名稱下面的類別。

特殊的物件引用「this」。

只要是物件裡面的成員,就必須使用這個物件來存取這個物件內(nèi)部的和方法。

<?php class boy{     
//變量(成員屬性)    
 var $name ="jw";    
  var $age = "21";    
   var $sex = "男";     
    //函數(shù)(成員方法)     
    public function zuofan(){        
    echo "{$this->name} 做飯<br>";        
     $this->jiawu();     }     
     function jiawu(){       
      echo "家務(wù)<br>";     } 
      }  
      $boy1 = new boy(); 
       $boy2 = new boy;  
       $boy2 ->name = "李四";  
       $boy1->name = "張三";   
       $boy1->zuofan();  
       $boy2->zuofan();
?>

建構(gòu)方法

建構(gòu)子 ,是一種特殊的方法。主要用來在建立物件時初始化對象, 即為對象成員變數(shù)賦初始值,總是與new運算子一起使用在建立物件的語句中。

1.是物件建立完成,第一個自動呼叫的方法(特殊)

2.方法名稱比較特殊,可以和類別名稱相同名的方法名稱

#3.給物件中的成員賦初值使用的.

<?php class boy{    
 //變量(成員屬性)     
 var $name;     
 var $age;     
 var $sex;      
 function __construct($name,$age,$sex="男"){        
  $this->name="$name";         
  $this->age="$age";         
  $this->sex="$sex";     }     
  //函數(shù)(成員方法)     
  public function zuofan(){         
  echo "{$this->name} 做飯<br>";         
  $this->jiawu();     }     
  function jiawu(){        
   echo "家務(wù)<br>";     } 
   }  
   $boy1 = new boy("名字",28); 
    $boy2 = new boy("名",26,"男");  
     $boy1->zuofan(); 
     $boy2->zuofan();
?>

析構(gòu)方法

析構(gòu)函式(destructor) 與建構(gòu)函數(shù)相反,當(dāng)物件結(jié)束其生命週期時(例如物件所在的函數(shù)已調(diào)用完畢),系統(tǒng)會自動執(zhí)行析構(gòu)函數(shù)。

PHP 5 引入了析構(gòu)函數(shù)的概念,這類似於其它物件導(dǎo)向的語言,其語法格式如下:

void __destruct ( void )

#繼承

PHP 使用關(guān)鍵字?extends?來繼承一個類,PHP 不支援多重繼承,格式如下:

<?php

class Child extends Parent {
?? // 程式碼部分
}

?>

存取控制

##PHP 對屬性或方法的存取控制,是透過在前面加入關(guān)鍵字public(公有),protected(受保護)或private(私有)來實現(xiàn)的。

·???????? public(公有):公有的類別會員可在任何地方被存取。

·???????? protected(受保護):受保護的類別成員可以被其本身以及其子類別和父類別存取。

·???????? private(私有):私有的類別成員只能被其定義所在的類別存取。

可查看public.php??? protected.php??? private.php查看差異

方法重寫

#方法重載( override)/覆蓋-在什麼情況下使用:當(dāng)父類別知道所有的子類別都需要用到一個方法,但父類別不知道怎麼去寫這個方法時,就需要用到方法的重載。這時候,可以讓子類別去重寫,來覆寫這個方法。

通俗實例-父類(動物)知道其子類(貓和狗)都會叫,但它們的叫法都不一樣,所以父類沒法去寫這個方法,只能讓子類(貓和狗)去定義。程式碼如下:

<?php
class Animal{
 public $name;
 protected $price;
 function cry(){
 echo "不知道動物怎么叫";
 }
}
class Dog extends Animal{
 function cry(){
 echo "汪汪...";
 }
}
class Pig extends Animal{
 function cry(){
 echo "哼哼..."
 }
}
?>

介面#

介面interface 是一個規(guī)定,給人繼承用的東西,有點像抽象類別
在裡面定義的方法,卻不去實例化,而需要別的類別去implements 它,而且必須一一實作接口所有定義的方法,舉例
interface Shop?
{?
public function buy($gid);?
public function sell($gid);?
public function view($gid);
}???
我宣告一個shop介面類,定義了三個方法:買(buy),賣(sell),看(view),那麼繼承此類的所有子類別都必須實作這3個方法少一個都不行,如果子類別沒有實作這些話,就無法運作。實際上介面類別說白了,就是一個類別的模板,一個類別的規(guī)定,如果你屬於這類,你就必須遵循我的規(guī)定,少一個都不行,但是具體你怎麼去做,我不管,那是你的事,如:

<?php
class BaseShop implements Shop  
{  
public function buy($gid)  
{  
echo('你購買了ID為 :'.$gid.'的商品');  
}  
public function sell($gid)  
  
echo('你賣了ID為 :'.$gid.'的商品');  
}  
public function view($gid)  
{  
echo('你查看了ID為 :'.$gid.'的商品');  
}  
}
?>

常數(shù)

#可以把在類別中始終保持不變的值定義為常數(shù)。在定義和使用常數(shù)的時候不需要使用 $ 符號。

常數(shù)的值必須是一個定值,不能是變量,類別屬性,數(shù)學(xué)運算的結(jié)果或函數(shù)呼叫。

<?php
class MyClass
{
    const constant = '常量值';
 
    function showConstant() {
        echo  self::constant . PHP_EOL;
    }
}
 
echo MyClass::constant . PHP_EOL;
 
$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起
 
$class = new MyClass();
$class->showConstant();
 
echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
?>

php中::的意思

類別中靜態(tài)方法與靜態(tài)屬性的參考方法
例如

<?php
class Test{     
public static $test = 1;    
public static function test(){ 
   }
   }
?>

可以不用實例化物件直接使用Test:: $test 來取得$test屬性的值
靜態(tài)方法呼叫也同理Test::test(); 直接呼叫靜態(tài)方法test

抽象類別

對於PHP程式設(shè)計師來說,最為難掌握的一點要數(shù)PHP抽象類別來應(yīng)用這一塊知識點。作為一個新手其實也還沒到要用物件導(dǎo)向的知識去編程,但以後進行開發(fā),使用類別進行封裝或使用介面之類,把程式進行各種模組式的開發(fā),這當(dāng)然是必然的。

?

在自然語言中,我們理解抽象的概念是,一個物體的一種大的描述,這種描述對某一類物體來說是共有的特性。那麼在PHP中也是一樣的,我們把一個類別進行抽象,可以指明類別的一般行為,這個類別應(yīng)該是一個模板,它指示它的子方法必須實現(xiàn)的一些行為。

PHP抽象類別應(yīng)用的定義:

abstract class ClassName{

}

PHP抽象類別應(yīng)用重點:

  1.定義一些方法,子類別必須完全實作這個抽像中所有的方法

  2.不能從抽象類別建立對象,它的意義在於被擴展

  3.抽象類別通常具有抽象方法,方法中沒有大括號

PHP抽象類別應(yīng)用重點:

  1.抽象方法不必實現(xiàn)具體的功能,由子類別來完成

  2.在子類實作抽象類別的方法時,其子類別的可見性必須大於或等於抽象方法的定義

  3.抽象類別的方法可以有參數(shù),也可以為空

  4.如果抽象方法有參數(shù),那麼子類別的實作也必須有相同的參數(shù)個數(shù)

PHP抽象類別應(yīng)用範(fàn)例:

abstract public function_name(); //注意沒有大括號

PHP抽象類別規(guī)則:

1.???? 某個類別只要至少含有一個抽象方法,就必須宣告為抽象類別

2.???? 抽象方法,不能夠含有函數(shù)體

3.???? 繼承抽象類別的子類,實現(xiàn)抽象方法的,必須跟隨抽象方法具有相同或更低的存取層級

4.???? 繼承抽象類別的子類,如果不實作所有抽象方法,那麼該子類別也為抽象類別

?我們來實作一個簡單的抽象類別:計算矩形的面積。這個矩形可以從形狀類別擴展。

可查看abstract.php程式碼

?Final 關(guān)鍵字

如果我們不希望一個類別被繼承,我們使用final來修飾這個類別。這個類別將無法被繼承。

final---用於類別、方法前。?
final類別---不可被繼承。?
final方法---不可被覆寫。?
final類別不能被繼承。?
當(dāng)我們只希望一個類別不可擴充時,可在類別的前面加上Final,該類別就不能被繼承。

Static 關(guān)鍵字

php中的變數(shù)作用範(fàn)圍的另一個重要特性就是靜態(tài)變數(shù)(static 變數(shù))。靜態(tài)變數(shù)僅在局部函數(shù)域中存在且只初始化一次,當(dāng)程式執(zhí)行離開此作用域時,其值不會消失,會用上次執(zhí)行的結(jié)果。

PHP_EOL

換行符號

呼叫父類別建構(gòu)方法

parent::__construct()?。

PHP 不會在子類別的建構(gòu)方法中自動的呼叫父類別的建構(gòu)方法。要執(zhí)行父類別的建構(gòu)方法,需要在子類別的建構(gòu)方法中呼叫


#
繼續(xù)學(xué)習(xí)
||
<?PHP class boy{ //變量(成員屬性) var $name ="jw"; var $age = "21"; var $sex = "男"; var $height = "182CM"; var $eye = "big"; //函數(shù)(成員方法) function zuofan(){ return "做飯<br>"; } function jiawu(){ return "家務(wù)<br>"; } }; ?>