Blogger Information
Blog 26
fans 0
comment 3
visits 19633
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
抽象类与继承与CURD2019/10/9
西门吃雪
Original
486 people have browsed it

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>';





















 ?>


Correction status:qualified

Teacher's comments:作业总结也很重要
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post