什么是面向对象
面向对象是把解决的问题按照一定规则划分成一个或多个对象, 然后通过调用对象的方法来解决问题
面向过程是把解决的问题划分成几个步骤, 然后用函数将这些步骤一一实现, 使用的时候调用函数
面向对象的三大特性
封装 继承 多态
定义
定义类的时候将类中属性私有化, 私有属性只能在本类中访问, 为了让外界访问, 需要提供public修饰的方法, 比如getXxx和setXxx
优点
隐藏实现细节, 对类外部提供访问方法, 提高安全性
定义
在一个现有类的基础上去构建一个新的类, 新的类称作子类, 现有类被称为父类,
子类会自动拥有父类所有可继承的属性和方法(public和protected).
语法结构
class 父类名{}
class 子类名 extends 父类名{}
优点
提高了代码复用性
注意: 子类继承的方法和属性的访问权限不能低于父类对应方法和属性的访问权限, 比如下面这样是错误的
class Animal
{
protected $name;
}
class Dog extends Animal
{
private $name;
}
Dog类中的name属性的访问权限只能是大于等于protected, 也就是public和protected, 不能低于protected
定义
一个类被多个子类继承, 如果这个类的某个方法被多个子类表现不同的功能, 这种行为称为多态, 即多态是同一个东西不同形态的展示
多态实现必须满足三个条件: 子类继承父类/子类重写父类方法/父类引用指向子类对象
代码
abstract class Animal
{
abstract function say();
}
class Dog extends Animal
{
function say()
{
echo 'wangwang';
}
}
class Cat extends Animal
{
function say()
{
echo 'miaomiao';
}
}
// PHP的类型约束只存在于函数的形参
function work(Animal $a)
{
$a->say();
}
// 父类引用指向子类对象
// wangwang
work(new Dog());
// miaomiao
work(new Cat());