作者foxzgerald (O⊥M)
看板PHP
標題Re: [請益] 有沒有用物件導向寫的簡單討論區
時間Fri Oct 20 14:49:39 2006
1F:推 taiwancat:php的OO有哪裡不夠完整嗎? 10/20 14:15
2F:→ taiwancat:純粹好奇o.o 10/20 14:18
OO 有三個特性:封裝(Encapsulation)、多型(Polymorphism)、繼承(Inheritance)。
在 PHP5 之後,因引介了 private, public 和 protected 等 modifier,
所以語言維護封裝特性的能力增強了不少;PHP4 以前的版本,則得靠訓練
有素的工程師自己維持。
繼承方面,感覺跟 Java 實作的方式類似,可以繼承單一類別、以及多重繼承介面。
然而建構子的使用上,個人覺得比起 C++,還是有些缺點... 不過或許這是我的習慣
問題吧。
然後提到多型。PHP 在這方面弱到一種程度,無法用
overloading 的方式設計物件的
行為(如果我說錯了,希望有人能分享一下如何辦到:P)。這對物件的設計造成一些
障礙,得繞些圈子才能達到類似的效果(maybe 加入一堆 switch 或 if..then XD)
x x x
記得以前 OO 的老師說過,受良好軟體工程訓練的人,即便是 C 也可以很用 OO 的
方式開發;而對 OO 沒概念的人,既使用 Java 或 C# 一類物件導向的語言,也可以
寫的一點都不像 OO。
其實語言未必要原生支援 OO 的機制才能以 OO 開發;但是如果有這些機制輔助,那
顯然能省下不少時間 coding 一堆判別式、或是處理 函式呼叫時的一狗票參數。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.199.121
3F:推 superGA:overloading不行沒錯 T_T 10/20 14:53
4F:推 taiwancat:熊熊想起來...overloading也沒有 10/20 15:34
5F:→ superGA:overridding有 10/20 15:43
6F:→ superGA:我說php5 10/20 15:44
我常把 overloading 和 overriding 這兩個字意搞錯..
剛剛發現又搞錯了 XD
class foo{
function getName($var_a) { echo "foo"; }
// 下面是 overloading, 多載/重載 同一函式
// and .. php 沒法這樣搞..囧
//function getName($var_a, $var_b) { echo "foofoo"; }
}
class bar extends foo
{
// 這是 overriding, 子類別 覆載/覆寫 父類別的方法
function getName($var_c) { echo "bar"; }
}
真是對不起.. 誤導了大家 m(_ _)m
※ 編輯: foxzgerald 來自: 140.119.199.121 (10/20 16:56)
7F:推 foxzgerald:修正一下 ...:P 10/20 16:56
8F:→ superGA:我天了... 10/20 17:08
9F:推 taiwancat:其實跟override比起來, overloading並沒有那麼重要 10/20 17:18
10F:→ taiwancat:手動overloading可以自己if判斷一下就好了... 10/20 17:18
11F:→ taiwancat:(因為php變數型態的彈性, 所以可以自己做overloading) 10/20 17:19
12F:推 neopro:overloading是靜態行為,所謂OO多型主要是體現於"動態"上:) 10/20 17:28
※ 編輯: foxzgerald 來自: 140.119.199.121 (10/20 22:48)
13F:推 yukang:php 無法重載系統函數-.- 這就是最麻煩的地方 10/20 22:51