亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 21
粉絲 0
評(píng)論 0
訪問量 29607
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
類的繼承和三種訪問限定控制符------2019.09.30
刂艸亻的博客
原創(chuàng)
1122人瀏覽過

類的繼承和三種訪問限定控制符

總結(jié):

1.類的繼承 關(guān)鍵字 extends

     一個(gè)類可以在聲明中用 extends,關(guān)鍵字繼承另一個(gè)類的方法和屬性。PHP不支持多重繼承,一個(gè)類只能繼承一個(gè)基類。被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。但是如果父類定義方法時(shí)使用了 final,則該方法不可被覆蓋??梢酝ㄟ^ parent:: 來訪問被覆蓋的方法或?qū)傩浴?當(dāng)覆蓋方法時(shí),參數(shù)必須保持一致否則 PHP 將發(fā)出 E_STRICT 級(jí)別的錯(cuò)誤信息。但構(gòu)造函數(shù)例外,構(gòu)造函數(shù)可在被覆蓋時(shí)使用不同的參數(shù)。

子類繼承父類時(shí),會(huì)繼承父類的屬性和方法,除了 private 的屬性和方法外,其它的都可以直接訪問和調(diào)用,只能通過在父類中定義的訪問器來訪問。

2.訪問限定控制符

public : 類中,類外均可訪問, 子類中也可以訪問

protected: 類中,類外不可訪問, 但是子類中可以訪問

private: 只允許在類中, 類外, 子類中不可訪問

3.構(gòu)造方法(魔術(shù)方法)__construct

    在類實(shí)例化的時(shí)候會(huì)自動(dòng)觸發(fā),一般用來初始化屬性值;

實(shí)例

<?php

namespace _9030;
class Demo1
{
    //屬性(變量), public 公共的,公開的,誰都可以用的
    public $product = '手機(jī)';
    public $price = 5800;

    //private表示私有的,只有本類內(nèi)部可以使用;例如成本是***內(nèi)部才知道
    private $chengben;

    //protected表示受保護(hù)的,只有本類或子類或父類中可以訪問;例如專利是受保護(hù)的
    protected $zhuanli;

    // 構(gòu)造方法
    // 前面加了二個(gè)下劃線的方法, 又叫魔術(shù)方法
    // 魔術(shù)方法不需要用戶手工調(diào)用,是由php根據(jù)某種條件自動(dòng)觸發(fā)
    public function __construct($chengben, $zhuanli)
    {
        // 1. 初始化對(duì)象的狀態(tài),由屬性決定
        $this->chengben = $chengben;
        $this->zhuanli = $zhuanli;

        // 2. 完成對(duì)象創(chuàng)建時(shí)的自動(dòng)化操作
        echo $this->getInfo3();
    }

    //方法(函數(shù))
    public function getInfo1()
    {
        // 當(dāng)前類的引用: self
        $obj = new self();    
        echo '商品名稱:'.$obj->product.'----'.'商品價(jià)格:'.$obj->price.'<br><hr>';
    }

    public function getInfo2()
    {
        // 當(dāng)前類的引用: self
        // 當(dāng)前對(duì)象的引用: $this, 偽變量
        // 1. 類的實(shí)例化
//        $this = new self();

        // 2. 訪問類中成員,用對(duì)象訪問
        return '商品名稱: ' . $this->product.', 商品價(jià)格: ' . $this->price;
    }


    public function getInfo3()
    {
        return '制造成本: ' . $this->chengben.', 專利歸屬: ' . $this->zhuanli;
    }

    public function getInfo4()
    {
        echo '商品名稱:'.$this->product.'----'.'商品價(jià)格:'.$this->price.'<br><hr>';
    }

}

//訪問普通成員屬性(public)的三種方式
//1,實(shí)例話類,然后用對(duì)象直接訪問類屬性
// $obj = new Demo1();
// echo '商品名稱:'.$obj->product.'----'.'商品價(jià)格:'.$obj->price.'<br><hr>';//商品名稱:手機(jī)----商品價(jià)格:5800

//2.通過方法來直接獲取輸出
// $obj->getInfo1();//商品名稱: 手機(jī)---商品價(jià)格: 5800
        // 通過方法獲取數(shù)據(jù)后返回輸出
// echo $obj->getInfo2();//商品名稱: 手機(jī), 商品價(jià)格: 5800

//3.由于使用了__construct 構(gòu)造方法,在實(shí)例化該類的時(shí)候會(huì)自動(dòng)觸發(fā)
//并且由于實(shí)在類的內(nèi)部調(diào)用的私有的$chengben和受保護(hù)的$zhuanli,可以直接輸出
new Demo1('2000','諾基亞');//制造成本: 2000, 專利歸屬: 諾基亞
echo'<hr>';

//4.如果直接在類的外部訪問 protected 和 private 會(huì)報(bào)錯(cuò)
// $obj = new Demo1();
// $this->chengben = '2000';
// $this->zhuanli = '諾基亞';
// echo '制造成本: ' . $this->chengben.', 專利歸屬: ' . $this->zhuanli;

//5.類的繼承 關(guān)鍵字 extends
// 一個(gè)類可以在聲明中用 extends,關(guān)鍵字繼承另一個(gè)類的方法和屬性。PHP不支持多重繼承,一個(gè)類只能繼承一個(gè)基類。
//被繼承的方法和屬性可以通過用同樣的名字重新聲明被覆蓋。但是如果父類定義方法時(shí)使用了 final,則該方法不可被覆蓋??梢酝ㄟ^ parent:: 來訪問被覆蓋的方法或?qū)傩浴?// 當(dāng)覆蓋方法時(shí),參數(shù)必須保持一致否則 PHP 將發(fā)出 E_STRICT 級(jí)別的錯(cuò)誤信息。但構(gòu)造函數(shù)例外,構(gòu)造函數(shù)可在被覆蓋時(shí)使用不同的參數(shù)。
class Sub1 extends Demo1
{

}

//由于子類Sub1繼承了父類Demo1 ,所以通過子類可以訪問父類的屬性和方法
$obj=new Sub1(2000,'華為');//制造成本: 2000, 專利歸屬: 華為
echo'<br>';
$obj->getInfo4();

//6.子類的功能擴(kuò)展
class Sub2 extends Demo1
{
    //在子類中新添加了一個(gè)屬性
    public $num;
    public $zhuanli_price;

    //又創(chuàng)建了一個(gè)構(gòu)造方法
    public function __construct($chengben, $zhuanli, $num,$zhuanli_price){
        parent::__construct($chengben, $zhuanli);
        $this->num =$num;
        $this->zhuanli_price =$zhuanli_price;
    }

    //添加了一個(gè)計(jì)算總和的方法的方法
    public function total(){
        return round($this->zhuanli_price * $this->num, 3);
    }
}
$sub2 = new Sub2(3000,'摩托摩拉',5,888888.88888);
echo ',專利總價(jià)'.$sub2->total();
//制造成本: 3000, 專利歸屬: 摩托摩拉,專利總價(jià)4444440
echo'<hr>';

//7.方法重置
class Sub3 extends Sub2
{
    // 重寫計(jì)算總和,加上折扣率
    public function total(){
        $total = parent::total();

        // 設(shè)置折扣率
        switch(true){
            case($total>4444444&&$total<6666666):
                $zhekou=0.88;
                break;
            case($total>=6666666&&$total<8888888):
                $zhekou=0.77;
                break;
            case($total>=8888888):
                $zhekou=0.66;
                break;
            default:
                $zhekou=1;
        }

        $zhekou_zongjia = round($total * $zhekou,3);
        if($zhekou<1){
            return '折率后總價(jià):'.$zhekou_zongjia.'元<span style="color: red">('.$zhekou.'折)</span>';
        }else{
            return $zhekou_zongjia;
        }
    }

}


$sub3 = new Sub3(3000,'蘋果',7,888888.88888);
echo '<br>'.$sub3->total();
echo'<hr>';

// 訪問控制符
// public : 類中,類外均可訪問, 子類中也可以訪問
// protected: 類中,類外不可訪問, 但是子類中可以訪問
// private: 只允許在類中, 類外, 子類中不可訪問
class Demo2
{
    //類中成員:屬性(成員屬性).方法(成員方法)
    //對(duì)象屬性:需要使用類的實(shí)例進(jìn)行訪問的成員屬性
    public $name;//姓名
    protected $postion;//職位
    private $salary;//工資
    protected $department;//部門

    //構(gòu)造方法,初始化賦值
    public function __construct($name,$postion,$salary,$department)
    {
        $this->name = $name;
        $this->postion = $postion;
        $this->salary = $salary;
        $this->department = $department;
    }

    //職位訪問器->方法
    public function getPostion(){
        return $this->department === '硬件研發(fā)部' ? $this->postion  : '無權(quán)查看' ;
    }

    //工資訪問器->方法
    public function getSalary(){
        return $this->department === '硬件研發(fā)部' &&$this->name === '大雄' ? $this->salary  : '無權(quán)查看' ;
    }

}
$obj= new Demo2('大雄','軟件開發(fā)',6666,'硬件研發(fā)部');
echo '職位:'.$obj->getPostion().'<br>';
echo '工資:'.$obj->getSalary();

class Sub extends Demo2
{
    public function display()
    {
    //    return $this->name; // public在子類中可以訪問
    //    return $this->postion; // protected 在子類中可以訪問
    //    return $this->salary; // private 在子類中無法訪問
    // return $this->getSalary();// private 在子類中無法訪問 可以通過父類中定義的方法,在子類中調(diào)用得到返回值
        return parent::salary;  
    }
}

echo '<hr>';

$sub = new Sub('大雄','軟件開發(fā)',6666,'硬件研發(fā)部');
echo $sub->display(), '<br>';

運(yùn)行實(shí)例 ?

點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例



批改狀態(tài):合格

老師批語:總結(jié)的非常棒, 全部寫在注釋中, 也是一個(gè)好方法
本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)