interface Animal
{
public function __construct($name);
public function speak();
public function getName();
}
class Cat implements Animal
{
protected $name=null;
public function __construct($name){ $this->name=$name; }
public function speak(){ echo 'meow'; }
public function getName(){ return $this->name;}
}
class Dog implements Animal
{
protected $name=null;
public function __construct($name){ $this->name=$name; }
public function speak(){ echo 'woof'; }
public function getName(){ return $this->name;}
}
$animals=Array(array('name'=>'Felix','type'=>'Cat'),array('name'=>'Fido','type'=>'Dog'));
foreach($animals as $a)
{
$theAnimal=new $a['type']($a['name']);
echo '<p>speak, '.$theAnimal->getName().'</p><p>';
$theAnimal->speak();
echo '</p>';
}
練習oop的過程在網路上看到這個介面的範例,可以透過loop執行動態的使用物件,想請問各位大大,這樣的介面如果改成多載的方式會是比較好的寫法嗎?
p.s:目前了解多載的用意是在於針對不同的參數數量或是形態,可以得到不同的回傳值;想了解多載的新手,如果理解有誤請小力點~~
PHP的多載跟其他程式語言不一樣,他是透過定義幾個magic function來實做的,雖然目的類似但是不太規範......然後你的例子用不到多載。
多載有非常多適合的場景,例如.NET Framework裡面有非常多多載的方法。常見的是,同一個操作可以隨著參數越來越多而有更詳細的設定與結果。例如一個取日期的函數,可以多加一個locale參數,讓他使用本地日期慣用格式來輸出等等。或是輸出一個html tag的文本,可以多加幾個屬性參數更詳細輸出屬性等等。
實做時,常常會在使用較多參數的方法中呼叫較少參數的方法,然後再用其餘的參數處理結果,這樣可以減少程式碼的重複。
PHP overloading 要看fillano 大大的這篇
2018 年的這篇也不錯
題外話,中文的奧妙
一字之差「多」載和「過」載過
載聽起來好像有什麼東西快要爆掉了