Home avatar

Miles Chou

天涯何處無幹話,何必要講實務話

Faker(3)--Base 類別中的基本方法

昨天有提到 GeneratoraddProvider() 方法,可以把各式各樣的 Provider 加入 Generator。而也有提到 Generator 的屬性或方法,會轉接到 Provider 提供的方法。

雖然沒有硬性規定,不過它的 Provider 都有繼承自 Provider\Base 的基礎類別,這個類別定義了很多產生假資料的基本方法,讓我們一起來看看。

基本隨機取樣的方法

Faker(2)--Factory 與 Generator

Faker 套件使用方法非常單純--使用工廠(Factory)建構產生器(Generator),然後把產生器拿來用就對了。

如果有認真翻原始碼的話,會發現它是有經過設計的。內部元件間是鬆耦合狀態,這也表示我們也是能夠簡單地客製化自己的產生器的。

以下會以類別名討論,為節省版面空間,將會把 Faker 命名空間省略。

Factory 是標準的 Simple Factory Pattern 實作,它使用靜態方法 create() 取得固定一種類型的物件--Generator。類別圖如下:

classDiagram
    class Client
    class Factory
    class Generator
    Client -- Factory
    Client --> Generator : use
    Factory --> Generator : create

Generator 是需要經過組裝的,因客戶要求的 $locale 不同,而會有不同的組裝內容。跟現實生活的生產線一樣,組裝 Generator 的任務是交由 Factory 負責的。

Client,也就是使用 Faker 套件的客戶端,只要使用 Factory::create() 就能保證一定會拿到 Generator。如果物件組裝過程有問題的話,則會丟例外。

Generator 的 doc block 定義了很多屬性和方法,但會發現裡面完全沒有實作,也就是全靠 __get()__call() 達成目的。

Carbon(4)--擴充繼承類別的範例

今天來繼續看 Carbon 還有擴充哪些功能

Carbon 提供許多比較的方法,讓我們在判斷時間會方便很多。

這些方法相信許多開發者都有看過。即使沒看過,每一個方法也都有相對應的別名可以參考使用。

這些方法是基於上面的基本比較方法實作出來的。

這兩個方法是基於 DIFFERENCES 功能實作的。

這些方法因為非常語言化,所以用起來很方便。會這樣設計,是因為我們在平常用詞時,會不自覺使用這些字眼:「這日期過去了嗎?」「這日期是未來嗎?」「這日期是今天嗎?」等等。

而且都可以跟昨天提到的建構方法直接串接: