oop: object oriented programming .面向对象编程
把组件的实现和接口分开,并且让组件具有多态性。
oop三大特性 封装 继承 多态
封装
a)将属性和方法封装到一起,形成对象,
b)隐藏内部的实现细节,对外提供可操作的接口(public的方法)
继承,子类可以通过继承,直接使用父类定义好的属性和方法(非私有的),extends,代码可重用
多态,在不同的上下文中(语境),其表现形态不一样。php体现的十分模糊。原因是php是弱类型语言。
java的多态体现的十分清晰,大体分两类:父类引用指向子类对象;接口引用指向实现接口的类对象。java声明变量时都要给变量设定类型,所以存在什么父类引用和接口引用。而php则没有这点体现,php声明变量不需要给变量设定类型,一个变量可以指向不同的数据类型。所以,php不具有像java一样的多态。
php不具有像java那种清晰的多态,不是代表php不具有多态性。看下面一个例子:
code:
abstract class animal{
abstract function fun();
}
class cat extends animal{
function fun(){
echo "cat say miaomiao...";
}
}
class dog extends animal{
function fun(){
echo "dog say wangwang...";
}
}
function work($obj){
if($obj instanceof animal){
$obj -> fun();
}else{
echo "no function";
}
}
work(new dog());
work(new cat());
输出:
string(48)
dog say wangwang...
cat say miaomiao...
上面通过一个关键字instanceof来判断,变量指向的对象是否是animal类的一个实例,下面new cat(),new dog()都是animal子类的对象,而输出了“dog say wangwang...”和“cat say miaomiao...”,说明子类对象是父类的一个实例,从而达到了java多态的功能。
上边的类是抽象类,也表明了接口与实现接口的类对象同样可以适用。
至此,得出php虽然多态体现模糊,但还是具有多态特性的。
OOP的好处:
可重用
可维护
可扩展
灵活性比较高