abstract 这个关键词可以用来定义抽象类 ... 我们也可以把它用在类里的方法上 .. 如果一个类里面使用 abstract 这个关键词定义了抽象的方法,那么这个类也应该被定义成一个抽象的类。抽象方法里不能包含主体内容,也就是用 abstract 标记的方法,应该是一个空白的方法。还有就是,继承抽象类的类里面,必须要定义抽象方法的方法。
下面,我们在 Entity 这个抽象类里去定义一个抽象方法 ... 使用一个 abstract ... public ... save() 定义了一个抽象的公开的方法,叫做 save ... 在抽象方法里,不能包含东西 ... 我们可以试一下,先它里面,返回一个字符串 ...
abstract public function save() {
return '保存成功';
}
保存 ... 打开浏览器 ... 提示 Fatal error: Abstract function Entity::save() cannot contain body ... Entity 里面的 save 这个抽象方法不能包含主体。 回过来 ... 先去掉 save 这个抽象方法里的东西 .. 再保存一下 ... 回到浏览器 ... 这里又会显示一个错误 ... Fatal error: Class User contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Entity::save) ... 大概的意思就是,在 User 类里面,包含一个抽象方法 ... 你必须去定义这个方法。
回到 index.php ... 因为 User 这个类继承了 Entity 这个抽象类,这个抽象类里包含了一个抽象的方法,所以,我们必须要在 User 这个类里面,去定义这个方法。public function save ... 注意,这个 save 方法的访问控制不能比 Entity 里面的 save 抽象方法更保守。
也就是,如果在 Entity 里面,定义 save 方法的时候用了 protected ... 那么,在这个 User 类里面,save 方法可以使用 protected ,也可以是 public ,但是不能是 private ...
class User extends Entity {
protected $entity_type = 'user';
public function save() {
return $this->entity_type . ':保存成功!';
}
}
同样,在 Post 这个类里,也需要去定义这个 save 方法 ...
class Post extends Entity {
protected $entity_type = 'post';
public function save() {
return $this->entity_type . ':保存成功!';
}
}
再去这两个类的实例上,去调用这个 save 方法 ...
保存 ... 再去预览一下 ... 会显示 user:保存成功 ... post:保存成功 ...