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 的參數時,如何再建立物件後怎麼使用?
題外話對於多型和里氏替換原則倆著之間有甚麼使用時機嗎(歡迎大家跟小弟分享謝謝)~仍然學習的路上
如有問得不好的地方請鞭小力點~
類別的方法中,引數前的名稱是什麼?
Type declared variable arguments:
如果引數不是指定 class
的實例,則會跳出錯誤。
但是,您提供的程式碼有問題,因為 interface
不能被實例化。
如果
interface
沒有被任何class
實現,可以直接使用嗎?
如果 interface
沒有被實現的話,則 interface
是沒有用處的。
以網站地圖來解釋,必須先規劃網站需要什麼內容後,才會著手開發網站。interface
和 class
也是相同的道理,先藉由 interface
規劃出 class
的方法,再藉由 class
詳細實現/實作 interface
的功能。
同理,如果規劃好網站內容,但是不著手開發網站,那麼先前的規劃就起不了作用。
當某一方法的引數必須為指定
class
的實例時,如何呼叫這個方法?
承問題一的說明,當呼叫函式時,必須傳入指定類型之實例的引數。
了解~~謝謝大大的說明,我能夠直接理解成interface 就是必須搭配implements 才能夠發揮她的功能嗎?
可以,但是要記得 interface
不能實例化!
好的!!!謝謝您的解惑!!Felix