抽象类的定义和使用
php抽象类定义关键字 abstract
抽象方法是没有方法体的方法,没有方法体是指方法声明时没有花括号以及其中的内容,而是声明方法时直接在方法名后加上分号结束,声明抽象方法要使用abstract关键字修饰。声明抽象方法格式:abstract function();
抽象类中的方法不能自己去实现,需要靠子类中去实现
1. 抽象类不能实例化
2. 抽象类中定义的抽象方法必须在子类中实现
实例
<?php //抽象类 namespace _1009; //php抽象类定义关键字 abstract abstract class Person1 { //抽象类中的属性 protected $name; //抽象方法是没有方法体的方法,没有方法体是指方法声明时没有花括号以及其中的内容,而是声明方法时直接在方法名后加上分号结束,声明抽象方法要使用abstract关键字修饰。声明抽象方法格式:abstract function(); // 签名, 抽象方法 public function __construct($name = '雄') { $this->name = $name; } abstract public function getName(); abstract public function setName($value); } //抽象类中的方法不能自己去实现,需要靠子类中去实现 //1. 抽象类不能实例化 //2. 抽象类中定义的抽象方法必须在子类中实现 class Stus extends Person1 { public function getName() { return $this->name; } public function setName($value) { $this->name = $value; } } $stu = new Stus('熊猫'); echo $stu->getName(); echo '<hr>'; $stu->setName('北极熊'); echo $stu->getName();
运行实例 »
点击 "运行实例" 按钮查看在线实例
接口的定义和使用
定义接口类 ,关键字 interface
实现接口 ,关键字 implements
实例
<?php namespace _1009; //定义接口类 ,关键字 interface interface Book { //设置书名 public function bookName($bookName); //设置作者 public function bookZuoZhe($bookZuoZhe); } //实现接口 ,关键字 implements class Read implements Book { public $bookName; public $bookZuoZhe; //实现接口里面的方法 public function bookName($bookName) { $this->bookName = $bookName; } //实现接口里面的方法 public function bookZuoZhe($bookZuoZhe) { $this->bookZuoZhe = $bookZuoZhe; } public function getXinxi() { return '《'.$this->bookName.'》'.'作者:'.$this->bookZuoZhe; } } //客户端代码调用 $obj = new Read(); $obj->bookName('三体'); $obj->bookZuoZhe('刘念慈'); echo $obj->getXinxi();
运行实例 »
点击 "运行实例" 按钮查看在线实例
使用接口--实例演示数据库的curd操作
实例
<?php namespace _1009; //接口实战 interface iCurd { //增加数据 public function create($data); //查询数据 public function read(); //更新数据 public function update($data,$where); //删除数据 public function delete($where); } //创建工作类,实现接口方法 class Db implements iCurd { //数据库的连接对象 protected $pdo = null; //表名 protected $table; //构造方法连接数据库 public function __construct($dsn, $user, $pwd, $table = 'staff') { //保存实例化后的pdo对象 $this->pdo = new \PDO($dsn, $user, $pwd); //设置表名 $this->table = $table; } //添加数据 public function create($data) { // TODO: Implement create() method. // 字段列表 $fields = ' (name, age, sex,position, mobile, hiredate) '; // 值列表 $values = ' (:name, :age, :sex, :position, :mobile, :hiredate) '; //创建sql语句 $sql = 'INSERT INTO '.$this->table . $fields.' VALUES '.$values; //预处理语句 $stmt = $this->pdo->prepare($sql); //执行,绑定参数 $stmt->execute($data); //返回结果 return [ //返回受影响行数 'count' => $stmt->rowCount(), //返回主键ID 'id' => $this->pdo->lastInsertId() ]; } //查询数据 public function read($fields = '*',$where='',$limit='0,5') { //设置条件 $where = empty($where) ? '' : ' WHERE ' . $where; // 设置显示数量 $limit = ' LIMIT ' . $limit; // 拼接sql语句 $sql = 'SELECT '.$fields . ' FROM '.$this->table.$where.$limit; $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(\PDO::FETCH_ASSOC); } //更新数据 public function update($data,$where) { // 字段列表 $keys = array_keys($data); $set = ''; foreach ($keys as $value) { $set .= $value . ' = :' . $value. ', '; } $set = rtrim($set, ', '); //创建sql语句 $sql = 'UPDATE '.$this->table . ' SET '.$set.' WHERE '.$where; //预处理语句 $stmt = $this->pdo->prepare($sql); //执行,绑定参数 $stmt->execute($data); //返回结果 return [ //返回受影响行数 'count' => $stmt->rowCount(), //返回主键ID 'id' => $this->pdo->lastInsertId() ]; } //删除数据 public function delete($where) { $sql = 'DELETE FROM '.$this->table.' WHERE '.$where; $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->rowCount(); } } $dsn = 'mysql:host=127.0.0.1;dbname=chen'; $user = 'root'; $password = 'root'; $obj= new Db($dsn,$user,$password); //$data = [ // 'name' => '万剑一', // 'age' => 29, // 'sex' => 1, // 'position' => '祖传悲剧男', // 'mobile' => '1389998899', // 'hiredate' => time() //]; //$res = $obj->create($data); //echo '成功的新增了: '. $res['count'].' 条记录,新增的记录的主键ID是: ' . $res['id']; //查询 foreach($obj->read() as $value){ print_r($value); echo '<br>'; } echo '<hr>'; //修改 //$data = [ // 'name' => '张小凡', // 'position' => '悲剧男二号' //]; //print_r($obj->update($data,'staff_id = 16')); //删除 //echo $obj->delete('staff_id = 16');
运行实例 »
点击 "运行实例" 按钮查看在线实例