abstract classes ,就是抽象类。抽象类不能被实例化,只能作为其它类的一个父类。也就是说,你可以创建类,然后让它去继承定义为抽象类的类。
在设计类的时候,你会发现,有些类不需要去被实例化,而是去实例化继承它的那个类。这个时候,你可以把这种类型的类, 去定义成一个抽象类。
在抽象类里,可以去提供基本的属性和方法,然后继承它的类就会拥有这些属性和方法了。除了不能被实例化以外,抽象类跟普通的类没有什么区别。
(#视频)
定义抽象类
下面,我们去定义一个抽象类 ... 打开 index.php ..
定义抽象类需要使用 abstract 这个关键词 ... 后面是 class ,然后是类的名称 ... 我们叫它 Entity,实体 ... 给它在添加点属性还有方法 ... 先添加一个 protected ,受保护的属性.. 叫做 entity_type,实体类型 ...
再添加一个公开的方法 ... 叫做 get_entity_type ... 它做的事就是去返回 entity_type 实体类型这个属性的值 ...
abstract class Entity
{
protected $entity_type;
public function get_entity_type() {
return $this->entity_type;
}
}
这个 Entity 类就是一个抽象类,因为我们定义它的时候,用了一个 abstract 关键词 .. 抽象类是不能被实例化的 ... 我们可以试一下 ...
$entity = new Entity();
保存,回到浏览器 .. 提示 Fatal error: Cannot instantiate abstract class Entity ,不能实例化 Entity 这个抽象类 ...
我们可以再去创建两个类,让它们去继承这个抽象类 ... class User .. 创建一个叫 User 的类 ... extends ... 去继承 ... Entity ... 在里面,再去给继承过来的 entity_type 属性一个值 ...
class User extends Entity {
protected $entity_type = 'user';
}
再去定义一个类 ... class Post ... 让它也去继承 Entity 这个抽象类 .. 再给它的 entity_type 一个值 ... 叫做 post ... 文章 ...
class Post extends Entity {
protected $entity_type = 'post';
}
下面,我们再去基于这两个类去创建两个对象 ... 然后去调用 get_entity_type 方法,去输出 entity_type 属性的值 ...
$user = new User();
echo $user->get_entity_type() . '<br>';
$post = new Post();
echo $post->get_entity_type();
保存 ... 回到浏览器 ...
这里会显示出两个对象的实体类型。 user 还有 post ...