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 是沒有用處的。

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

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

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

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

qpalzm iT邦研究生 5 級 ‧ 2021-12-30 08:23:15 檢舉

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

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

kekeke

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

qpalzm iT邦研究生 5 級 ‧ 2021-12-30 15:26:34 檢舉

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

我要發表回答

立即登入回答