看板 PHP 關於我們 聯絡資訊
taiwancat:php的OO有哪裡不夠完整嗎? 10/20 14:15
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
superGA:overloading不行沒錯 T_T 10/20 14:53
taiwancat:熊熊想起來...overloading也沒有 10/20 15:34
superGA:overridding有 10/20 15:43
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)
foxzgerald:修正一下 ...:P 10/20 16:56
superGA:我天了... 10/20 17:08
taiwancat:其實跟override比起來, overloading並沒有那麼重要 10/20 17:18
taiwancat:手動overloading可以自己if判斷一下就好了... 10/20 17:18
taiwancat:(因為php變數型態的彈性, 所以可以自己做overloading) 10/20 17:19
neopro:overloading是靜態行為,所謂OO多型主要是體現於"動態"上:) 10/20 17:28
※ 編輯: foxzgerald 來自: 140.119.199.121 (10/20 22:48)
yukang:php 無法重載系統函數-.- 這就是最麻煩的地方 10/20 22:51