抽象类(abstract),一般用于基类,所有的公共方法都可以放在里面,抽象类是不能被实例化的,只能被继承.而且抽象方法是必须被重写的,其他可以根据需要选择.这样你可以简单只写一个抽象方法,其他方法大家都有了,省着写了.
以下是官方说法
PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
例子:
抽象类 BaseRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| <?php
namespace ApiDemo\Repositories\Eloquent;
abstract class BaseRepository { protected $model;
public function __construct() { $this->model = app()->make($this->model()); }
abstract public function model();
public function paginate($limit = null) { return $this->model ->paginate($limit); }
public function where(array $data) { return $this->model->where($data); }
public function first() { return $this->model->first(); }
public function find($id) { return $this->model->find($id); }
public function create(array $attributes) { $model = $this->model->newInstance($attributes); $model->save();
return $model; }
public function update($id, array $attributes) { $model = $this->model->find($id); $model->fill($attributes)->save();
return $model; }
public function destroy($id) { return $this->model->destroy($id); } }
|
集成类 UserRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
namespace ApiDemo\Repositories\Eloquent;
use ApiDemo\Repositories\Contracts\UserRepositoryContract;
class UserRepository extends BaseRepository implements UserRepositoryContract { public function model() { return 'ApiDemo\Models\User'; } }
|
从上面可以看到,只要实现抽象方法 model()
就可以了.这样指定了表,一些相同查询方法,大家都可以用了.
参考文档