iT邦幫忙

0

多載(Overloading) 的選擇

  • 分享至 

  • xImage
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:目前了解多載的用意是在於針對不同的參數數量或是形態,可以得到不同的回傳值;想了解多載的新手,如果理解有誤請小力點~~

看更多先前的討論...收起先前的討論...
說真的,不太明白你想問的東西是什麼。
或許你可以先解釋一下你的「多載」的意義是啥好了。
fillano iT邦超人 1 級 ‧ 2021-12-17 19:02:40 檢舉
PHP的多載跟其他程式語言不一樣,他是透過定義幾個magic function來實做的,雖然目的類似但是不太規範......然後你的例子用不到多載。
qpalzm iT邦研究生 5 級 ‧ 2021-12-20 08:21:11 檢舉
TO ㊣浩瀚星空㊣ :目前小弟對多載還不是很熟悉,想請教各位大大,對於上面的範例能不能利用多載來寫,如有不清楚 請多包涵~
TO fillano:我有去爬文過您的文章,想在請問一下,多載有比較適合使用的場景嗎?
fillano iT邦超人 1 級 ‧ 2021-12-20 09:27:53 檢舉
多載有非常多適合的場景,.NET Framework裡面有非常多多載的方法。常見的是,同一個操作可以隨著參數越來越多而更詳細的設定與操作。例如一個取日期的函數,可以多加一個locale參數,讓他使用設定的本地日期慣用格式來輸出等等。或是輸出一個html tag的文本,可以多加幾個屬性參數更詳細輸出屬性等等。

實做時,常常會在使用較多參數的方法呼叫較少參數的方法,然後再用其餘的參數處理結果,這樣可以減少程式碼的重複。
qpalzm iT邦研究生 5 級 ‧ 2021-12-20 09:38:26 檢舉
謝謝fillano大大!!!要不要開個回答給你最佳解~
fillano iT邦超人 1 級 ‧ 2021-12-20 10:30:49 檢舉
好吧...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
fillano
iT邦超人 1 級 ‧ 2021-12-20 11:13:46
最佳解答

PHP的多載跟其他程式語言不一樣,他是透過定義幾個magic function來實做的,雖然目的類似但是不太規範......然後你的例子用不到多載。

多載有非常多適合的場景,例如.NET Framework裡面有非常多多載的方法。常見的是,同一個操作可以隨著參數越來越多而有更詳細的設定與結果。例如一個取日期的函數,可以多加一個locale參數,讓他使用本地日期慣用格式來輸出等等。或是輸出一個html tag的文本,可以多加幾個屬性參數更詳細輸出屬性等等。

實做時,常常會在使用較多參數的方法中呼叫較少參數的方法,然後再用其餘的參數處理結果,這樣可以減少程式碼的重複。

不懂純推
/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif

1
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-17 22:23:38

PHP overloading 要看fillano 大大的這篇
2018 年的這篇也不錯

題外話,中文的奧妙
一字之差「多」載和「過」載
載聽起來好像有什麼東西快要爆掉了
/images/emoticon/emoticon50.gif

qpalzm iT邦研究生 5 級 ‧ 2021-12-20 08:22:12 檢舉

fillano 大大的這篇!!!我有看!!!但其中的奧妙真的好難懂!
不知道使用的時機QQ..
/images/emoticon/emoticon06.gif

我要發表回答

立即登入回答