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

面向?qū)ο?/h1>

?面向?qū)ο缶幊蹋∣bject Oriented Programming, OOP, 面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu),OOP的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成,OOP達(dá)到了軟件工程的三 個(gè)目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。面向?qū)ο笠恢笔擒浖_(kāi)發(fā)領(lǐng)域內(nèi)比較熱門的話 題,首先,面向?qū)ο蠓先祟惪创挛锏囊话阋?guī)律。其次,采用面向?qū)ο蠓椒梢允瓜到y(tǒng)各部分各司其職、各盡所能。為編程人員敞開(kāi)了一扇大門,使其編程的代碼 更簡(jiǎn)潔、更易于維護(hù),并且具有更強(qiáng)的可重用性。有人說(shuō)PHP不是一個(gè)真正的面向?qū)ο蟮恼Z(yǔ)言,這是事實(shí)。PHP 是一個(gè)混合型語(yǔ)言,你可以使用OOP,也可以使用傳統(tǒng)的過(guò)程化編程。然而,對(duì)于大型項(xiàng)目,你可能需要在PHP 中使用純的OOP去聲明類,而且在你的項(xiàng)目里只用對(duì)象和類。這個(gè)概念我先不多說(shuō)了,因?yàn)橛泻芏嗳伺笥堰h(yuǎn)離面向?qū)ο缶幊痰闹饕蚓褪且唤佑|面向?qū)ο蟾拍畹?時(shí)候就理解不上去, 所以就不想去學(xué)下去了. 等讀者看完整體內(nèi)容后再去把概念搞明白吧。

?????? 既然學(xué)習(xí)面向?qū)ο?,那我們就先?lái)了解什么事面向過(guò)程。

面向過(guò)程

“面向過(guò)程”(Procedure Oriented)是一種以過(guò)程為中心的編程思想?!懊嫦蜻^(guò)程”也可稱之為“面向記錄”編程思想,他們不支持豐富的“面向?qū)ο蟆碧匦裕ū热缋^承、多態(tài)),并且它們不允許混合持久化狀態(tài)和域邏輯。

就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。

?

面向過(guò)程的重要優(yōu)勢(shì)

  • 可讀性

  • 可重用性

  • 維護(hù)性

  • 可測(cè)試性

面向過(guò)程就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。

面向?qū)ο笫前褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為。

例如下面的例子


?QQ截圖20161010091445.png

可以明顯地看出,面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過(guò)程的設(shè)計(jì)中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本,因?yàn)橥ǔTO(shè)計(jì)人員會(huì)考慮到實(shí)際情況進(jìn)行各種各樣的簡(jiǎn)化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對(duì)象中出現(xiàn),從而保證了繪圖的統(tǒng)一.

類與對(duì)象的關(guān)系

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

?

類:具有相同特性(數(shù)據(jù)元素)和行為(功能)的對(duì)象的抽象就是類。因此,對(duì)象的抽象是類,類的具體化就是對(duì)象,也可以說(shuō)類的實(shí)例是對(duì)象,類實(shí)際上就是一種數(shù)據(jù)類型。類具有屬性,它是對(duì)象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類的屬性。類具有操作,它是對(duì)象的行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法來(lái)描述。

對(duì)象和類的關(guān)系:

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

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>";        }
          };
?>


注:在類的成員屬性面前一定要有一個(gè)修飾詞,如果不是知道使用聲明修飾詞,可以使用var(關(guān)鍵字),如果一旦有其他的修飾詞就不要用var了
注意:成員屬性不可以是帶運(yùn)算符的表達(dá)式.變量.方法或函數(shù)調(diào)用。聲明的成員方法必須和對(duì)象相關(guān),不能是一些沒(méi)有意義的操作。

?

?

實(shí)例化對(duì)象

類的實(shí)例化格式如下:

$對(duì)象名 = new 類名稱([參數(shù)]);??????? // 類的實(shí)例化:類成為對(duì)象的語(yǔ)句

?

·???????? $對(duì)象名:類實(shí)例化返回的對(duì)象名稱,用于引用類中的方法。

·???????? new:關(guān)鍵字,表明要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。

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

·???????? 參數(shù):指定類的構(gòu)造方法用于初始化類的值。如果類中沒(méi)有定義構(gòu)造函數(shù),PHP會(huì)自動(dòng)創(chuàng)建一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù)。

new.php里提供的源代碼,能清晰的看出如何實(shí)例化對(duì)象,并訪問(wèn)。

<?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>";
?>

-> 符號(hào)? 代表訪問(wèn)對(duì)象名下面的類。

特殊的對(duì)象引用“this”。

只要是對(duì)象里面的成員,就必須使用這個(gè)對(duì)象來(lái)訪問(wèn)這個(gè)對(duì)象內(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ù) ,是一種特殊的方法。主要用來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象, 即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中。

1.是對(duì)象創(chuàng)建完成,第一個(gè)自動(dòng)調(diào)用的方法(特殊)

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

3.給對(duì)象中的成員賦初值使用的.

<?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)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對(duì)象結(jié)束其生命周期時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。

PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z(yǔ)言,其語(yǔ)法格式如下:

void __destruct ( void )

繼承

PHP 使用關(guān)鍵字?extends?來(lái)繼承一個(gè)類,PHP 不支持多繼承,格式如下:

<?php

class Child extends Parent {
?? // 代碼部分
}

?>

訪問(wèn)控制

PHP 對(duì)屬性或方法的訪問(wèn)控制,是通過(guò)在前面添加關(guān)鍵字 public(公有),protected(受保護(hù))或 private(私有)來(lái)實(shí)現(xiàn)的。

·???????? public(公有):公有的類成員可以在任何地方被訪問(wèn)。

·???????? protected(受保護(hù)):受保護(hù)的類成員則可以被其自身以及其子類和父類訪問(wèn)。

·???????? private(私有):私有的類成員則只能被其定義所在的類訪問(wèn)。

可查看public.php??? protected.php??? private.php查看區(qū)別

方法重寫

方法重載(override)/覆蓋——在什么情況下使用:當(dāng)父類知道所有的子類都需要用到一個(gè)方法,但父類不知道怎么去寫這個(gè)方法時(shí),就需要用到方法的重載。這時(shí)候,可以讓子類去重寫,來(lái)覆蓋這個(gè)方法。

通俗實(shí)例——父類(動(dòng)物)知道其子類(貓和狗)都會(huì)叫,但它們的叫法都不一樣,所以父類沒(méi)法去寫這個(gè)方法,只能讓子類(貓和狗)去定義。代碼如下:

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

接口

接口interface 是一個(gè)規(guī)定,給人繼承用的東西,有點(diǎn)像抽象類
在里面定義的方法,卻不去實(shí)例化,而需要?jiǎng)e的類去implements 它,而且必須一一實(shí)現(xiàn)接口定義的所有方法,舉個(gè)例子
interface Shop?
{?
public function buy($gid);?
public function sell($gid);?
public function view($gid);?
}???
我聲明一個(gè)shop接口類,定義了三個(gè)方法:買(buy),賣(sell),看(view),那么繼承此類的所有子類都必須實(shí)現(xiàn)這3個(gè)方法少一個(gè)都 不行,如果子類沒(méi)有實(shí)現(xiàn)這些話,就無(wú)法運(yùn)行。實(shí)際上接口類說(shuō)白了,就是一個(gè)類的模板,一個(gè)類的規(guī)定,如果你屬于這類,你就必須遵循我的規(guī)定,少一個(gè)都不 行,但是具體你怎么去做,我不管,那是你的事,如:

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

常量

可以把在類中始終保持不變的值定義為常量。在定義和使用常量的時(shí)候不需要使用 $ 符號(hào)。

常量的值必須是一個(gè)定值,不能是變量,類屬性,數(shù)學(xué)運(yùn)算的結(jié)果或函數(shù)調(diào)用。

<?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(){ 
   }
   }
?>

可以不用實(shí)例化對(duì)象直接使用 Test::$test 來(lái)取得$test屬性的值
靜態(tài)方法調(diào)用也同理Test::test(); 直接調(diào)用靜態(tài)方法test

抽象類

對(duì)于PHP程序員來(lái)說(shuō),最為難掌握的一點(diǎn)要數(shù)PHP抽象類應(yīng)用這一塊知識(shí)點(diǎn)。作為一個(gè)新手其實(shí)也還沒(méi)有到要用面向?qū)ο蟮闹R(shí)去編程,但以后進(jìn)行開(kāi)發(fā),使用類進(jìn)行封裝或者使用接口之類,把程序進(jìn)行各種模塊式的開(kāi)發(fā),這當(dāng)然是必然的。

?

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

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

abstract class ClassName{

}

PHP抽象類應(yīng)用要點(diǎn):

  1.定義一些方法,子類必須完全實(shí)現(xiàn)這個(gè)抽象中所有的方法

  2.不能從抽象類創(chuàng)建對(duì)象,它的意義在于被擴(kuò)展

  3.抽象類通常具有抽象方法,方法中沒(méi)有大括號(hào)

PHP抽象類應(yīng)用重點(diǎn):

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

  2.在子類實(shí)現(xiàn)抽象類的方法時(shí),其子類的可見(jiàn)性必須大于或等于抽象方法的定義

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

  4.如果抽象方法有參數(shù),那么子類的實(shí)現(xiàn)也必須有相同的參數(shù)個(gè)數(shù)

PHP抽象類應(yīng)用示例:

abstract public function_name(); //注意沒(méi)有大括號(hào)

PHP抽象類規(guī)則:

1.???? 某個(gè)類只要至少含有一個(gè)抽象方法,就必須聲明為抽象類

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

3.???? 繼承抽象類的子類,實(shí)現(xiàn)抽象方法的,必須跟該抽象方法具有相同或者更低的訪問(wèn)級(jí)別

4.???? 繼承抽象類的子類,如果不實(shí)現(xiàn)所有抽象方法,那么該子類也為抽象類

?我們來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的抽象類:計(jì)算矩形的面積。這個(gè)矩形可以從形狀類擴(kuò)展。

可查看abstract.php代碼

?Final 關(guān)鍵字

如果我們不希望一個(gè)類被繼承,我們使用final來(lái)修飾這個(gè)類。這個(gè)類將無(wú)法被繼承。

final---用于類、方法前。?
final類---不可被繼承。?
final方法---不可被覆蓋。?
final類不能被繼承。?
當(dāng)我們只希望一個(gè)類不可擴(kuò)展時(shí),可在類的前面加上Final,該類就不能被繼承。

Static 關(guān)鍵字

php中的變量作用范圍的另一個(gè)重要特性就是靜態(tài)變量(static 變量)。靜態(tài)變量?jī)H在局部函數(shù)域中存在且只被初始化一次,當(dāng)程序執(zhí)行離開(kāi)此作用域時(shí),其值不會(huì)消失,會(huì)用上次執(zhí)行的結(jié)果。

PHP_EOL

換行符

調(diào)用父類構(gòu)造方法

parent::__construct()?。

PHP 不會(huì)在子類的構(gòu)造方法中自動(dòng)的調(diào)用父類的構(gòu)造方法。要執(zhí)行父類的構(gòu)造方法,需要在子類的構(gòu)造方法中調(diào)用


繼續(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>"; } }; ?>
提交重置代碼