引言
任何一种编程语言,面向对象都具有三大特性:封装、继承、多态。在开始本篇之前,我们先来说明一下类和对象的关系。对象就是具体的某个事物,比如,小猫卡卡、小狗哈哈,对象就是实实在在的客观事物。那类是什么呢?俗话说,物以类聚,人以群分。类就是物体的抽象表示。比如小猫卡卡和小猫嘟嘟都是小猫,小猫就是一个类。说到小猫,只知道是猫科动物,但在现实中是哪个东西,这个就不知道了。前文有讲过,编程是客观世界在虚拟世界的表达,类和对象也是用于演绎现实世界的表达。类是一类物体的抽象表示,对象就是类的具体化表示。类经过实例化后就成为了对象。
1. 封装
封装就是将事物的属性和技能封装到一起,其中属性被称为成员变量,技能被称为成员方法。在所有的编程语言中,成员变量和成员方法是一种共识性的说法,所以在接下来的讲解中,我们就统一采用这一种描述。
<?php
class Cat{
var $mouse;
function say(){
echo 'miaomiao';
}
}
$cat = new Cat();
$cat->say();
在该部分中,Cat类有成员变量mouse和成员方法say。嘴(mouse)也是Cat的属性,叫(say)也是Cat的技能。new Cat()后,也就完成了实例化,构造了对象$cat。对象通过调用方法就可以实现具体的业务逻辑。
2. 继承
常言道,老子英雄儿好汉。父亲具有的技能通常情况下会潜移默化的影响子孙后代,而祖上积累的家业(比如财富)也会传给子孙后代。子孙除了继承父辈的财产外,也会靠自身的努力拥有一部分财富并学会一系列的技能。让我们用程序来演绎一下吧。
<?php
class Father
{
var $baseWealth = 10;
function can()
{
echo '我能赚10元';
echo '</br>';
}
}
class Child extends Father
{
var $childWealth = 5;
function childCan()
{
echo '我能赚5元';
}
}
$child = new Child();
$child->can();
$child->childCan();
$child为实例化Child类的对象,不仅拥有了自身的成员方法childCan,还可以使用父类的成员方法(父类技能)can。
看下结果。
3. 多态
多态是父类的对象可以调用任意一个子类的方法,比如动物会叫,猫是动物的子类,猫叫是喵喵,狗也是动物的一种,狗叫是旺旺。当动物这个类调用子类猫叫时是喵喵,动物调用子类狗叫时是旺旺。这就是多态。
<?php
class Animal
{
function say()
{
}
}
class Cat extends Animal
{
var $mouse;
function say()
{
echo '喵喵';
echo '<br/>';
}
}
class Dog extends Animal
{
function say()
{
echo '旺旺';
}
}
function say(Animal $animal)
{
$animal->say();
}
$cat = new Cat();
$dog = new Dog();
say($cat);
say($dog);
总结
封装、继承、多态是面向对象的三大特性,在接下来学习框架的过程中会时常用到,希望大家还是要好好掌握。
此外,面向对象还有权限、构造函数、析构函数、接口等等都比较简单,还望自行百度学习。