iT邦幫忙

0

物件導向PHP

  • 分享至 

  • xImage
interface EmailMaker
{
    public function makeEmailHTML(): string;
}
class EmailSender
{
    private $emails;
    
    public function addEmail($address, EmailMaker $emailMaker)
    {
        $email = [
            'address' => $address,
            'emailHTML' => $emailMaker->makeEmailHTML(),
        ];
        array_push($this->emails, $email);
    }
    public function getEmails(){
        return $this->emails;
    }
}
$emails=new EmailSender();
$emails->addEmail('test','');
print_r($emails->getEmails());

目前正在練習物件導向的多型參考了範例想請大家幫忙解惑,

問題1:當介面已設定一個EmailMaker的介面,再addEmail參數中使用了
EmailMaker $emailMaker 請問這是甚麼用法?

問題2:interface要實現如果沒有implements 是如何可以使用的?

問題3:當addEmail宣告EmailMaker $emailMaker 的參數時,如何再建立物件後怎麼使用?

題外話對於多型和里氏替換原則倆著之間有甚麼使用時機嗎(歡迎大家跟小弟分享謝謝)~仍然學習的路上

如有問得不好的地方請鞭小力點~/images/emoticon/emoticon41.gif

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
Felix
iT邦研究生 2 級 ‧ 2021-12-29 17:15:14
最佳解答

類別的方法中,引數前的名稱是什麼?

Type declared variable arguments
如果引數不是指定 class 的實例,則會跳出錯誤。

但是,您提供的程式碼有問題,因為 interface 不能被實例化。

如果 interface 沒有被任何 class 實現,可以直接使用嗎?

如果 interface 沒有被實現的話,則 interface 是沒有用處的。

以網站地圖來解釋,必須先規劃網站需要什麼內容後,才會著手開發網站。
interfaceclass 也是相同的道理,先藉由 interface 規劃出 class 的方法,再藉由 class 詳細實現/實作 interface 的功能。

同理,如果規劃好網站內容,但是不著手開發網站,那麼先前的規劃就起不了作用。

當某一方法的引數必須為指定 class 的實例時,如何呼叫這個方法?

承問題一的說明,當呼叫函式時,必須傳入指定類型之實例的引數。

qpalzm iT邦新手 1 級 ‧ 2021-12-30 08:23:15 檢舉

了解~~謝謝大大的說明,我能夠直接理解成interface 就是必須搭配implements 才能夠發揮她的功能嗎?

Felix iT邦研究生 2 級 ‧ 2021-12-30 14:33:53 檢舉

kekeke

可以,但是要記得 interface 不能實例化!

qpalzm iT邦新手 1 級 ‧ 2021-12-30 15:26:34 檢舉

好的!!!謝謝您的解惑!!/images/emoticon/emoticon41.gifFelix

我要發表回答

立即登入回答