摘要:使用和在中,通過為屬性或方法設(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
摘要:是推薦的便于記憶的首字母簡寫,它代表了命名的最重要的五個(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é)原則 ...
摘要:日期和時(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 ...
摘要:將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的所應(yīng)該具備的基本功。前幾天在上看到這個(gè)項(xiàng)目,感覺很有收獲,于是在這里記錄一下。 將代碼寫的簡潔并且易讀易懂是每一位優(yōu)秀的coder所應(yīng)該具備的基本功。 前幾天在github上看到clean-code-php這個(gè)項(xiàng)目,感覺很有收獲,于是在這里記錄一下。 使用有意義并且可讀的變量名稱 Bad: $ymdstr = $moment->format(y-...
摘要:考慮到函數(shù)表示某種行為,函數(shù)名稱應(yīng)該是動(dòng)詞或短語,用以說明其背后的意圖以及參數(shù)的意圖。不好的方式好的方式使用條件簡寫。這可能微不足道,但值得一提。 為了保證可讀性,本文采用的音譯而非直意。 簡介 如果你關(guān)注代碼本身和代碼的編寫方式,而不是只關(guān)心它是否能工作,那么你寫代碼是有一定的水準(zhǔn)。專業(yè)開發(fā)人員將為未來的自己和其他人編寫代碼,而不僅僅只編寫當(dāng)前能工作就行的代碼。 在此基礎(chǔ)上,簡潔代碼...
摘要:超過三個(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)該避免的。這很重要的。如果你...
閱讀 1150·2021-10-27 14:13
閱讀 2650·2021-10-09 09:54
閱讀 931·2021-09-30 09:46
閱讀 2440·2021-07-30 15:30
閱讀 2182·2019-08-30 15:55
閱讀 3424·2019-08-30 15:54
閱讀 2865·2019-08-29 14:14
閱讀 2785·2019-08-29 13:12