1,抽象类应用
2,接口应用
1,抽象类应用
//抽象类 是指 类内部 定义的方法没有具体内容 只有方法名称 和 方法所需要的参数
//抽象类 定义符 abstract 在类定义符 class 和方法定义符 public funaction 前使用,进行声明抽象定义
//抽象类 用于规范 方法名称和参数的数量, 对子类继承该方法进行名称和参数限制
//抽象类 通过在不同的子类中调用重写方法 达到最终使用效果
//抽象类 内的方法都为抽象方法时, 即为接口,接口 用inetrface 定义, 替换 abstract class 方法不用额外声明抽象方法
//抽象类的子类,继承所有抽象方法,并必须重写所有抽象方法,
//抽象类方法的可见属性,puclic protected 也同时被子类继承, 子类的声明 不能小于父类的声明
<?php namespace _100901; //定义一个抽象类在 class前加 abstract abstract class Postion { //抽象类方法定义时不写{},定义前写 abstract,名称后直接用 ;分号结束 abstract public function PostionList($name,$name1); } //定义一个从属抽象类的子类 class TPostion extends Postion { //子类中的方法必须与父类中的抽象方法参数一致 public function PostionList($name,$name1) { return $name.$name1.' 是[php讲师,Mysql讲师,高级讲师]'; } } //new一个子类 $list = new TPostion(); //输出子类中的方法,子类方法中的叁数对比父类中的方法参数 可以多但不可以少,多出的参数不识别 echo $list->PostionList('jack','wang','cn'); // 输出结果 : jackwang 是[php讲师,Mysql讲师,高级讲师]
点击 "运行实例" 按钮查看在线实例
——————————————————————————————
2,接口应用
// 通过接口 实现 数据读取 操作
// 定义接口,接口内 只有 接口常量和接口方法
// 接口常量 必须赋值,用const 定义,接口方法为抽象方法只有名称和参数限制
<?php namespace _100902; interface idb { const DNS = 'mysql:host=127.0.0.1;dbname=app.io'; const USER= 'root'; const PASSWORD = 'root123456'; } interface idbinfo { public function table($tablename); public function field($fieldname); public function where($wherename); public function limit($limitname); public function orderby($orderbyname); public function select(); // public function insert($name,$data); // public function update($name); // public function delete($name); }
点击 "运行实例" 按钮查看在线实例
// 定义数据操作方法,从属 接口 idbinfo
// 提供数据源,和 数据操作
class Dbinfo implements idbinfo { //定义构造方法,接收 接口中的数据参数,连接数据库 public function __construct($name) { $this->pdo = $name; } //设置表名方法 public function table($tablename) { // 给table属性赋值 $this->table = $tablename; // 返回对象 return $this; } //设置字段名方法 public function field($fieldname) { // 给fielde属性赋值,没有传值为所有字段,有传值进行赋值 $this->field = empty($fieldname) ? '*' : $fieldname; // 返回对象 return $this; } //设置条件方法 public function where($wherename) { // 给where属性赋值,没有传值为空,有传值进行赋值 $this->where = $wherename == '' ? '' : ' WHERE ' . $wherename; // 返回对象 return $this; } //设置数量方法 public function limit($limitname) { // 给limit属性赋值,没有传值为空,有传值进行赋值 $this->limit = $limitname == '' ? '' : ' LIMIT ' . $limitname; // 返回对象 return $this; } //设置排序方法 public function orderby($orderbyname) { // 给orderby属性赋值,没有传值为空,有传值进行赋值 $this->orderby = $orderbyname == '' ? '' : ' ORDER BY ' . $orderbyname; // 返回对象 return $this; } //设置mysql语句拼接 public function select() { $sql = 'SELECT ' . $this->field . ' FROM ' . $this->table . $this->where . $this->orderby . $this->limit; $stmt = $this->pdo->prepare($sql); echo '<hr>'; $stmt->execute(); // 向外返回结果 return $stmt->fetchAll(\PDO::FETCH_ASSOC); } }
点击 "运行实例" 按钮查看在线实例
// 控制数据 ,数据连接DB 类, 数据返回 Dbop 类 从属 idb接口
class DB implements idb { // 静态属性初始化 protected static $pdo = ''; // 连接数据库函数 public static function linkdb() { // 类中的静态属性赋值 为 pod 对象,连接接口中的常量值 return self::$pdo = new \PDO(idb::DNS, idb::USER, idb::PASSWORD); } public static function __callStatic($name, $arguments) { // 把pdo信息传到dbinfo类中,开启一个连接对象 $dboper = new Dbinfo(self::linkdb()); // 调用查询对象$query中的对应的方法 return call_user_func_array([$dboper, $name], $arguments); } } // 控制返回 从属 db 父类 class Dbop extends Db { //静态方法接收参数, 链式调用 DB类中的数据库开启 public static function find($tablename,$fieldname,$wherename,$limitname,$orderbyname) { return DB::table($tablename) ->field($fieldname) ->where($wherename) ->limit($limitname) ->orderby($orderbyname) ->select(); } }
点击 "运行实例" 按钮查看在线实例
输出结果: 查找 movies表中 cate_id=1 的前2条数据,mov_id,name,cate_id三个字段,按mov_id 正序排列
print_r(Dbop::find('movies','mov_id,name,cate_id','cate_id=1',2,'mov_id ASC'));
点击 "运行实例" 按钮查看在线实例
Array ( [0] => Array ( [mov_id] => 1 [name] => 倚天屠龙记 [cate_id] => 1 ) [1] => Array ( [mov_id] => 2 [name] => 都挺好 [cate_id] => 1 ) )