PHP面向?qū)ο?/h1>

什么是面向?qū)ο螅?/h3>

準(zhǔn)確的說面向?qū)ο缶幊涛覀兘?OOP风范,面向?qū)ο蟮木幊谭譃槿糠郑好嫦驅(qū)ο蠓治觯∣bject Oriented Analysis,OOA)、面向?qū)ο笤O(shè)計(Object Oriented Design,OOD),以及面向?qū)ο缶幊蹋∣bject Oriented Programming)沪么。面向?qū)ο缶幊痰膬蓚€中個重要的概念是類和對象硼婿。

面向?qū)ο蟮娜筇卣?/h3>
  • 封裝性
    把相同的屬性和方法抽象成一個類叫做封裝
  • 繼承性
    子類繼承父類的屬性和方法叫做繼承。我們可以重寫和添加新的屬性方法禽车。在PHP 中支持的是單繼承寇漫。一個子類有且只有一個父類。
  • 多態(tài)性
    同一個類的不同對象,調(diào)用同一個方法可以獲得不同的結(jié)果叫多態(tài)(增強程序的靈活性和重用性)

PHP 對象

類的定義

PHP 通過 class 關(guān)鍵字加類名來定義類

<?php
class Person{

}
?>

成員方法

類中的函數(shù)被稱為成員方法

<?php
class Person{
    function man(){
  
  }
}

?>

類的實例化

通過 new 關(guān)鍵字 實例化對象殉摔,通過對象->成員方法 來調(diào)用成員方法州胳。

class Per{
    function man($name, $age)
    {
        echo $name;
        echo $age;
    }
}
$m1 = new Per();
echo $m1->man('小明','22');

成員變量

類中的變量,也稱為成員變量逸月。有些人也把它叫做屬性或者字段栓撞。成員變量的是用來保存數(shù)據(jù)信息。(訪問成員變量和成員方法的方法一樣碗硬,對象->成員變量)
定義成員變量和成員方法:

<?php
class Per{
    // 聲明成員變量
    // 關(guān)鍵字(修飾符) 成員變量名
    // 關(guān)鍵字有public ,private, protected, static
    public $name;
    public $age;
    public $money;
    public function man($name, $age,$money){
        echo $name.'今年'.$age.'工資是'.$money;  
    }
}
$m1 = new Per();
$m1->man('小明',22,4000);
?>

類常量

常量是不可改變的量,是一個恒值,舉例圓周率就是一個常量瓤湘。使用關(guān)鍵字 const定義常量。

class Per{
    // 通常常量用大寫字母
    const WORK='搬磚';
}
echo Per::WORK;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

構(gòu)造函數(shù)

當(dāng)一個類實例化為一個對象的時候恩尾,可能可能會隨著對象的初始化而初始化一些成員變量岭粤。就是給一些成員變量賦值。這種情況下我們就可以使用構(gòu)造函數(shù)特笋。因為對象實例化過程中構(gòu)造函數(shù)是自動執(zhí)行的。

析構(gòu)函數(shù)

析構(gòu)函數(shù)的作用和構(gòu)造方法方法剛好相反巾兆,是對象被銷毀時被調(diào)用的猎物,作用是釋放內(nèi)存。

<?php
class Person
{
    // 公共成員變量名
    public $name;
    public $age;
    public $sex;
    public $type = "人類";

    // 構(gòu)造函數(shù) 
    // 原來給成員變量賦值 
    // 在對象開始實例化的時候 自動執(zhí)行
    public function __construct($name, $age, $sex)
    {
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;
    }
    //析構(gòu)函數(shù) 在對象被銷毀的時候 自動執(zhí)行
    public function __destruct()
    {
        echo "$this->type.對象被銷毀,已釋放";
    }
}
$p1 = new Person('小龍', 18, 0);
print_r($p1);

繼承和多態(tài)

繼承

子類繼承父類的所有成員變量方法角塑,包括構(gòu)造方法蔫磨,當(dāng)子類被實例化的時候,PHP 會先在子類當(dāng)中找構(gòu)造方法圃伶,如果子類已經(jīng)有自己的構(gòu)造方法堤如。PHP 會先調(diào)用子類的方法蒲列。當(dāng)子類當(dāng)中沒有的時候,PHP 才會去調(diào)用搀罢。父類當(dāng)中的構(gòu)造方法蝗岖,這就是繼承。

<?php
class Person
{
    // 公共成員變量名
    public $name;
    public $age;
    public $sex;
}
// 繼承
// 將person當(dāng)成父類
// man繼承父類 person 的屬性和方法
class Man extends Person
{
    public function money()
    {
        echo '小龍賺錢';
    }
}
$m1 = new  Man('小劉', 23, 1);
$m1->money();
多態(tài)
<?php

class Animal
{
    public $name;
    public $sound;

    public function say(){
      echo  $this->sound;

    }
    public function __construct($name1,$sound){
        $this->name=$name1;
        $this->sound=$sound;
    }
}
 class Dog extends Animal{
}
class Cat extends Animal{ 
}
class Sheep extends Animal{  
}
function asay($obj) {
$obj->say();
}
$m1=new Dog('貓貓','喵喵');
$m2=new Cat('狗狗','汪汪汪');
$m3=new Sheep('羊羊','咩咩咩');
asay($m1);
asay($m2);
asay($m3);

操作符

PHP通過為變量this->和域的操作符"::"來訪問自己的成員變量和成員方法

  • this->
    在類內(nèi)部我們可以通過this訪問當(dāng)前實例化對象榔至,調(diào)用方法或成員變量的話則使用 "this->成員變量" 抵赢、 "this->成員方法" 來訪問。所以 this-> 只在類的內(nèi)部使用
    -操作符::
    $this只能在類的內(nèi)部去使用唧取。操作符"::"可以在沒有聲明任何實例的情況下铅鲤,訪問類當(dāng)中的成員方法或成員變量。(關(guān)鍵字::變量名/常量名/方法名
    )
    parent: 可以調(diào)用父類中的 成員變量枫弟,成員方法和常量
    self:可以調(diào)用當(dāng)前類中的 靜態(tài)成員和常量
    類名:可以調(diào)用本類中的靜態(tài)變量邢享,常量和靜態(tài)方法
<?php
//A 類
class A
{
    const Type = 0;
    const NAME = "A";
    function a(){
        // echo self::Type.self::NAME;//0,A
        // echo "<br>";
    }
}

class B extends A
{
    // 子類獨有的方法
    const Type = 1;
    const NAME = "B";
    public function a()
    {
        // echo parent::Type .parent::NAME;//0,A
        // echo "<br>";
        // echo self::Type.parent::NAME;//1,A
    }
}
$a1 = new  A();
$b1 = new  B();
$a1->a();
$b1->a();

修飾符

public、private淡诗、protected骇塘、static和final。這些關(guān)鍵字是用來限定類成員(包括方法和變量)的訪問權(quán)限袜漩。

public(公共成員)
  1. 在類的內(nèi)部 可以使用
  2. 在類的外部 可以使用
  3. 在子類的內(nèi)部 可以使用
<?php
class Per
{
    public $name = "小龍";
    public function fn()
    {
        // 1.可以在類的內(nèi)部訪問绪爸,對當(dāng)前類的 內(nèi)部可見
        echo $this->name;
    }
}

class Students extends Per
{
    public function fn1()
    {
        // 2.可以在子類的內(nèi)部訪問,對子類的內(nèi)部可見
        $this->fn();
    }
}
// 3.在類的外部可見
echo $s1->name;
$s1 = new Per();
// $s1->fn();//在類的內(nèi)部訪問
$s2 = new Students();
// $s2->fn1();//可以在子類的內(nèi)部訪問
private(私有成員)

1.在類的內(nèi)部 可以使用
2.在子類的內(nèi)部 不能使用
3.在類的外部 不能使用

class Book{
    private $name='HTML';
    public function setName($name){
        // 1.在當(dāng)前類內(nèi)部 可訪問
        $this->name=$name;
        echo $name;
    }
    public function getName(){
        echo $this->name;
    }
    private function c1(){
        echo '123';
    }
}

class Histoty extends Book{
    public function getBookName(){
        // 2.在子類內(nèi)部不可見 不可訪問繼承來的父類中的私有成員變量 私有方法
        echo $this->name;
        // $this->c1();
    }
}
$b1=new Book;
// $b1->setName('測試');//在當(dāng)前類內(nèi)部 可訪問
// 3.在類的外部不可訪問 私有成員變量或私有成員方法
// echo  $b1->name;//在類的外部 不能訪問
// $b1->name='js';//在類的外部 不能使用
$h1=new Histoty();
$h1->getBookName();//在子類的內(nèi)部 不能使用

protected(保護成員)
  1. 在類的內(nèi)部 可以使用
  2. 在子類的內(nèi)部 可以使用
  3. 在類的外部 不能使用
<?php
class Per{
    protected $money=100000;
    public function fn(){
        echo $this->money;
        // 1.在當(dāng)前的內(nèi)部可以訪問
    }
}
class Xs extends Per{
    public function fn1(){
        echo $this->money;
        // 2. 可以在子類的內(nèi)部訪問
    }
}
// 3. 在類的外部不能直接訪問宙攻,
$p1=new Per();
// $p1->fn();//在類的內(nèi)部 可以使用
// echo $p1->money;//在類的外部 不能使用
$s1=new Xs();
$s1->fn1();//在子類的內(nèi)部 可以使用
final 關(guān)鍵字
<?php
// final 被修飾過的類是最終版本
class A{
    public function aa(){
      echo 'aa'  ;
    }
    public function _construct(){
        $this->aa();
    }
}

final class B extends A{

    public function aa(){
        echo "bb";
    }
    // 被final  修飾過的方法 不能在子類中被重寫
}
// 被final 修飾過的 類不能被繼承
class C extends B{}
$c1= new C();
$c1->aa();
// $b1=new B();
// $b1->aa();//被final  修飾過的方法 不能在子類中被重寫

靜態(tài)成員(變量奠货,方法)

不是所有的方法都要通過創(chuàng)建對象來去調(diào)用的,我們可以座掘。通過給變量或者方法加上static關(guān)鍵字來直接調(diào)用递惋。也叫做訪問靜態(tài)成員

<?php
class Book{
    static $num=0;//聲明一個靜態(tài)變量$num,初始值為0;
    public function showMe(){
        echo '您是第'.self::$num.'位訪客';
        self::$num++;//
    }
}
$b1=new Book();
$b1->showMe();
echo '一共有'.Book::$num.'位訪客';


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末溢陪,一起剝皮案震驚了整個濱河市萍虽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌形真,老刑警劉巖杉编,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咆霜,居然都是意外死亡邓馒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門蛾坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來光酣,“玉大人,你說我怎么就攤上這事脉课【染” “怎么了财异?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長唱遭。 經(jīng)常有香客問我戳寸,道長,這世上最難降的妖魔是什么胆萧? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任庆揩,我火速辦了婚禮,結(jié)果婚禮上跌穗,老公的妹妹穿的比我還像新娘订晌。我一直安慰自己,他們只是感情好蚌吸,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布锈拨。 她就那樣靜靜地躺著,像睡著了一般羹唠。 火紅的嫁衣襯著肌膚如雪奕枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天佩微,我揣著相機與錄音缝彬,去河邊找鬼。 笑死哺眯,一個胖子當(dāng)著我的面吹牛谷浅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奶卓,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼一疯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夺姑?” 一聲冷哼從身側(cè)響起墩邀,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盏浙,沒想到半個月后眉睹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡废膘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年竹海,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖卑。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坊萝,靈堂內(nèi)的尸體忽然破棺而出孵稽,到底是詐尸還是另有隱情许起,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布菩鲜,位于F島的核電站园细,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏接校。R本人自食惡果不足惜猛频,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛛勉。 院中可真熱鬧鹿寻,春花似錦、人聲如沸诽凌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侣诵。三九已至痢法,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杜顺,已是汗流浹背财搁。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躬络,地道東北人尖奔。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洗鸵,于是被迫代替她去往敵國和親越锈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容