作者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