抽象类与继承与CURD2019/10/9

2019年10月13日 12:54:09阅读数:365博客 / 西门吃雪 / 第8期前端开发

10月9日作业
1. 写一个抽象类并继承它, 内容自定

<?php 

//抽象类
namespace _1009;

class Person1
{
     protected $name;

     public function __construct($name = 'brother')
     {
     	$this->name = $name;
     }

     public function getName()
     {
      return $this->name;
     }
     public function setName($value)
     {
     	$this->name = $value;
     }


}

$person = new person1();
echo '我的姓名:',$person->getName(),'<br>';
$person->setName('万物');
echo '我的姓名:',$person->getName(),'<br>';

echo '<hr>';




//当类中有一个方法没有实现.而仅仅做了一个实现的约定
//那么当前这个类必须把他声明为抽象类
//只需要在类前声名 abstract
abstract  class Person2
{    //抽象属性:属性没有值
	protected $name;

     public function __construct($name = 'brother')
     {
     	$this->name = $name;
     }

     public function getName()
     {
      return $this->name;
     }
     //签名:协议的接口
     //抽象方法: 给了一个方法但是有很多不确定的因素.
     abstract public function setName($value);
     

 }
 //抽象方法的两个基本特征 
 //第一不允许实例化
 //第二抽象类中所有的抽象方法必须在子类中实现

 class Stu extends Person2
 {
 	//构造方法不会继承
 	public function __construct($name)
 	{

 		parent::__construct($name);
 	}

 	//抽象类中定义的抽象方法必须在子类中实现
 	 public function setName($value)
     {
     	$this->name = $value;
     }
 }
        $stu = new Stu('朱八戒');

    echo '十万水军的大都督:'.$stu->getName().'<br>';

    $stu->setName('悟空');
    echo '花果山的美猴王是:'.$stu->getName().'<br>';



























 ?>

abstract: 定义抽象方法/抽象类

类中只要有一个抽象方法, 该类就应该声明为抽象类

抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现

实现抽象方法的子类方法可见性不能低于抽象方法原定义

抽象方法是public, 子类方法只能是public

抽象方法是protected, 子类方法只能是protected/public



2. 模仿课堂案例,写一个接口实现CURD操作, 并扩展一到二个方法

<?php
namespace _1009; 
interface iCurd
{
	//增加数据
	public function create($data);

	//读取数据
	public function read();

	// 更新数据
    public function update($data, $where);

	//删除数据
	public function delete($where);
}

//创建Db类,实现iCurd接口,完成基本的数据库操作
class Db implements iCurd
{
		//数据库的链接对象
	protected $pdo = null;

	// 数据表
	protected $table;

	// 构造方法: 连接数据库,并设置默认的数据表名称
    public function __construct($dsn, $user, $password, $table='staff')
    {
        $this->pdo = new \PDO($dsn, $user, $password);
        $this->table = $table;
    }

	//增加数据
	public function create($data)
    {
        // 字段列表
        $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' => $this->pdo->lastInsertId()
        ];
    }
	//$fields:字段
	//$where:查询条件
	//$limit:限制条数
	 // 查询数据
    public function read($fields='*', $where='', $limit='0, 5')
    {
        //设置条件
        $where = empty($where) ? '' : ' WHERE ' . $where;

        // 设置显示数量
        $limit = ' LIMIT ' . $limit;

        $sql = 'SELECT ' . $fields . ' FROM ' . $this->table. $where . $limit;
        $stmt = $this->pdo->prepare($sql);//创建SQL语句对象
        $stmt->execute();//执行SQL查询:

        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

	//更新数据
	//array_keys():获取某一个数组所有的健
	//trim删除一个字符串的前后空格
	public function update($data, $where)
    {
        $keyArr = array_keys($data);
        $set = '';
        foreach ($keyArr as $value) {
            $set .= $value . ' = :' . $value. ', ';
        }

        $set = rtrim($set, ', ');

        $sql = 'UPDATE ' . $this->table. ' SET ' . $set . ' WHERE ' . $where;

        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);

        return $stmt->rowCount();


    }


	 // 删除数据
    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=php';
$user = 'root';
$password = '123456';
$db = new Db($dsn, $user, $password);

// 遍历
foreach ($db->read() as $item) {
    print_r($item); echo '<br>';
}
echo '<hr>';
// //新增
// $data = [
// 	'name' => '黄蓉',
// 	'age'  => 18,
// 	'sex' => 1,
// 	'position' => '打狗棍接班人',
// 	'mobile' => '1234567899',
// 	'hiredate' => time()

// ];

// $res = $db->create($data);
// echo '成功的新增了:'. $res['count'].' 条记录,新增的记录的主键ID是'.$res['id'];

// echo '<hr>';
//更新

// $data = [
//    'age' => 40,
//    'position' => '抗金英雄'
// ];

// $where = 'staff_id = 11';
// echo '成功的更新了: ' . $db->update($data, $where) . ' 条记录';


// 删除
$where = 'staff_id = 22';
echo '成功的删除了: ' . $db->delete($where) . ' 条记录';








 ?>

3.关于接口的理解如下案例

<?php 

namespace _1009;
//接口  
//注意:接口中的方法全部都是抽象方法
//由于接口中的方法默认全是抽象方法 abstract可以省略不写
//接口的方法一定是public
interface  tYpe
{
	//设置电脑型号
	public function setType($type);
	//设置电脑的用途
	public function setPurpose($purpose);
}
//Alien 类实现了接口internest
class Alien implements  tYpe
{
	public $type;//type电脑类型属性
	public $purpose;// $purpose用途属性
	//接口的方法1
	public function setType($type)
	{
		$this->type =$type ;
	}

	//接口中的方法2
   public function setPurpose($purpose)
   {
   		$this->purpose = $purpose;
   }

    //类中可以有自己的方法
   public function getInfo()
   {
   	return $this->type.$this->purpose.'电脑<br>';
   }

}

//客户端调用代码
// Car 类实例化
$Alien = new Alien();
$Alien->setType('外星人');
$Alien->setPurpose('lunix专用');
echo  $Alien->getInfo();

echo '<hr>';





















 ?>


批改状态:合格

老师批语:作业总结也很重要

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    西门吃雪
    博文
    26
    粉丝
    0
    评论
    3
    访问量
    15998
    积分:0
    P豆:60