国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP代碼簡潔之道——類和對(duì)象部分

cyixlq / 2386人閱讀

摘要:使用和在中,通過為屬性或方法設(shè)置和關(guān)鍵字可以實(shí)現(xiàn)對(duì)屬性或方法的可見性控制。你的繼承表達(dá)了一個(gè)對(duì)等比如人類是動(dòng)物的關(guān)系,不是包含的關(guān)系比如用戶具有用戶詳情你能從基類中復(fù)用代碼你想通過修改全局類來對(duì)所有派生類進(jìn)行修改。

使用getter和setter

在 PHP 中,通過為屬性或方法設(shè)置 public, protected 和 private 關(guān)鍵字可以實(shí)現(xiàn)對(duì)屬性或方法的可見性控制。不過,通過 getter 和 setter 也可以達(dá)到控制可見性的目的,并且在某些場(chǎng)景下它具備一些額外的好處。

使用 getter和 setter 有以下好處:

當(dāng)你除了獲取對(duì)象之外還想做一些別的事情時(shí),就不用到項(xiàng)目中去查找所有的屬性并修改

使添加驗(yàn)證更簡單

在獲取和設(shè)置時(shí)添加日志和錯(cuò)誤處理更方便

我們可以延遲加載類的屬性

繼承了類,你可以重寫默認(rèn)的函數(shù)

另外,這是面向?qū)ο蟮幕驹O(shè)計(jì)原則中的開放/封閉原則。

Bad:

class BankAccount
{
    public $balance = 1000;
}

$bankAccount = new BankAccount();

// 買了一雙鞋...
$bankAccount->balance -= 100;

Good:

class BankAccount
{
    private $balance;

    public function __construct($balance = 1000)
    {
      $this->balance = $balance;
    }
    
    //做一些事情
    public function withdrawBalance($amount)
    {
        if ($amount > $this->balance) {
            throw new Exception("Amount greater than available balance.");
        }

        $this->balance -= $amount;
    }

    public function depositBalance($amount)
    {
        $this->balance += $amount;
    }

    public function getBalance()
    {
        return $this->balance;
    }
}

$bankAccount = new BankAccount();

// 買了一雙鞋...
$bankAccount->withdrawBalance($shoesPrice);

// 獲取結(jié)余
$balance = $bankAccount->getBalance();
讓對(duì)象具有私有或受保護(hù)的的成員

Bad:

class Employee
{
    public $name;

    public function __construct($name)
    {
        $this->name = $name;
    }
}

$employee = new Employee("John Doe");
echo "Employee name: ".$employee->name; // Employee name: John Doe

Good:

class Employee
{
    private $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

$employee = new Employee("John Doe");
echo "Employee name: ".$employee->getName(); // Employee name: John Doe
使用組合而不是繼承

這里不是說不使用繼承,使用“組合模式”和使用“繼承”都有很多好的理由。

這里想說的是當(dāng)你本能的要使用繼承時(shí)就想一想“組合模式”是否能更好幫你的解決問題。

那么,你可能想知道,“什么時(shí)候應(yīng)該用繼承?”, 這取決于你手頭上問題。

以下幾點(diǎn)說明了什么時(shí)候使用繼承會(huì)更合適。

你的繼承表達(dá)了一個(gè)對(duì)等(比如"人類是動(dòng)物")的關(guān)系,不是包含的關(guān)系(比如"用戶具有用戶詳情")

你能從基類中復(fù)用代碼

你想通過修改全局類來對(duì)所有派生類進(jìn)行修改。

Bad:

class Employee 
{
    private $name;
    private $email;

    public function __construct($name, $email)
    {
        $this->name = $name;
        $this->email = $email;
    }

    // ...
}

// 因?yàn)楣蛦T和稅收不是對(duì)等關(guān)系而是包含的關(guān)系
// 所以這里應(yīng)用組合比較合適


class EmployeeTaxData extends Employee 
{
    private $ssn;
    private $salary;
    
    public function __construct($name, $email, $ssn, $salary)
    {
        parent::__construct($name, $email);

        $this->ssn = $ssn;
        $this->salary = $salary;
    }

    // ...
}

Good:

class EmployeeTaxData 
{
    private $ssn;
    private $salary;

    public function __construct($ssn, $salary)
    {
        $this->ssn = $ssn;
        $this->salary = $salary;
    }

    // ...
}

class Employee 
{
    private $name;
    private $email;
    private $taxData;

    public function __construct($name, $email)
    {
        $this->name = $name;
        $this->email = $email;
    }

    public function setTaxData($ssn, $salary)
    {
        $this->taxData = new EmployeeTaxData($ssn, $salary);
    }

    // ...
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/25944.html

相關(guān)文章

  • PHP代碼簡潔之道——SOLID原則

    摘要:是推薦的便于記憶的首字母簡寫,它代表了命名的最重要的五個(gè)面對(duì)對(duì)象編碼設(shè)計(jì)原則單一職責(zé)原則開閉原則里氏替換原則接口隔離原則依賴反轉(zhuǎn)原則單一職責(zé)原則修改一個(gè)類應(yīng)該只為一個(gè)理由。別寫重復(fù)代碼這條原則大家應(yīng)該都是比較熟悉了。 SOLID 是Michael Feathers推薦的便于記憶的首字母簡寫,它代表了Robert Martin命名的最重要的五個(gè)面對(duì)對(duì)象編碼設(shè)計(jì)原則 S: 單一職責(zé)原則 ...

    PrototypeZ 評(píng)論0 收藏0
  • php之道》讀后總結(jié) php學(xué)習(xí)綱要

    摘要:日期和時(shí)間使用類完成讀取設(shè)置比較和計(jì)算日期與時(shí)間。單元測(cè)試單元測(cè)試是從編寫開始,貫穿于整個(gè)開發(fā)周期的一種用于保證函數(shù)類和方法的行為與預(yù)期一致的編程方法。是應(yīng)用的單元測(cè)試框架的業(yè)界標(biāo)準(zhǔn),其他幾個(gè)可選框架是行為驅(qū)動(dòng)開發(fā)行為驅(qū)動(dòng)開發(fā)有兩種方式和。 《php之道》閱讀地址:http://wulijun.github.io/php-the-right-way/#code_style_guide ...

    gitmilk 評(píng)論0 收藏0
  • PHP代碼簡潔之道——變量部分

    摘要:將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的所應(yīng)該具備的基本功。前幾天在上看到這個(gè)項(xiàng)目,感覺很有收獲,于是在這里記錄一下。 將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的coder所應(yīng)該具備的基本功。 前幾天在github上看到clean-code-php這個(gè)項(xiàng)目,感覺很有收獲,于是在這里記錄一下。 使用有意義并且可讀的變量名稱 Bad: $ymdstr = $moment->format(y-...

    mgckid 評(píng)論0 收藏0
  • JavaScript 的簡潔之道

    摘要:考慮到函數(shù)表示某種行為,函數(shù)名稱應(yīng)該是動(dòng)詞或短語,用以說明其背后的意圖以及參數(shù)的意圖。不好的方式好的方式使用條件簡寫。這可能微不足道,但值得一提。 為了保證可讀性,本文采用的音譯而非直意。 簡介 如果你關(guān)注代碼本身和代碼的編寫方式,而不是只關(guān)心它是否能工作,那么你寫代碼是有一定的水準(zhǔn)。專業(yè)開發(fā)人員將為未來的自己和其他人編寫代碼,而不僅僅只編寫當(dāng)前能工作就行的代碼。 在此基礎(chǔ)上,簡潔代碼...

    wudengzan 評(píng)論0 收藏0
  • PHP代碼簡潔之道——函數(shù)部分

    摘要:超過三個(gè)參數(shù)會(huì)導(dǎo)致參數(shù)之間的組合過多,你必須對(duì)每個(gè)單獨(dú)的參數(shù)測(cè)試大量不同的情況。拆分這些函數(shù),可以讓代碼可重用性更高且更易測(cè)試。 函數(shù)參數(shù)不要超過兩個(gè) 限制函數(shù)的參數(shù)數(shù)量是非常重要的,因?yàn)樗鼓愕暮瘮?shù)更容易測(cè)試。超過三個(gè)參數(shù)會(huì)導(dǎo)致參數(shù)之間的組合過多,你必須對(duì)每個(gè)單獨(dú)的參數(shù)測(cè)試大量不同的情況。 沒有參數(shù)是最理想的情況,一個(gè)或兩個(gè)參數(shù)是可以接受的,三個(gè)以上則是應(yīng)該避免的。這很重要的。如果你...

    crossoverJie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<