为了账号安全,请及时绑定邮箱和手机立即绑定

验证构造函数中的参数

验证构造函数中的参数

PHP
慕斯王 2021-10-08 13:15:38
我正在开发一个图书馆管理系统,基本上我有一个抽象类“Reader”,它扩展到“学生、教师和一般人”。我的问题是,我有一个“请求”类,我需要知道哪个“读者”请求这本书,以便能够验证这些数据:“教师只能同时申请10本书,学生只能同时申请5本书,一般公众只能同时申请2本书;”“教师每本书最多可保存6个月,学生最多保存5天,公众最多保存1个月;”“如果老师有书超过三个月,需要索取的,必须通知老师退还书;”如何在__construct 中传递三种类型的“Readers”,以验证上述数据。class Requests{    protected $bookRequested;    protected $teacher;    protected $student;    protected $public;    protected $requestDate;    protected $returnDate;    public function __construct(Book $bookRequested, Teacher $teacher, Student $student, GeneralPublic $public)    {        $this->bookRequested = $bookRequested;        $this->teacher = $teacher;        $this->student = $student;        $this->public = $public;        $this->requestDate = date('Y-m-d H:i:s');        $this->returnDate = date('Y-m-d H:i:s');    }}
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我希望如果我能提供帮助,您可以在验证时检查类类型。


class Reader{

    protected $requests;

    protected $name;

    public function get_name(){

        return $this->name;

    }

}

class Teacher extends Reader{


}

class Student extends Reader{


}

 class GeneralPublic extends Reader{


 }

 class Book{

     protected $name;

     public function __construct($name){

        $this->name = $name;

     }

 }

class Requests

{

    protected $bookRequested;

    protected $reader;

    protected $requestDate;

    protected $returnDate;


    public function __construct(Book $bookRequested, Reader $reader)

    {

        $this->bookRequested = $bookRequested;

        $this->reader = $reader;

        $this->requestDate = date('Y-m-d H:i:s');

        $this->returnDate = date('Y-m-d H:i:s');

    }

    public function validate(){

        echo get_class($this->reader);

    }

}

 $teacher = new Teacher();

 $student = new Student();

 $gen_pu = new GeneralPublic();


 $book = new Book("Travel");

 $req = new Requests($book,$teacher);

$req->validate();


查看完整回答
反对 回复 2021-10-08
?
DIEA

TA贡献1820条经验 获得超2个赞

我不确定为什么在同一个请求中需要所有三个读者,因为只有其中一个会涉及给定的事务。如果你有这个:


abstract class Reader {}

class Teacher extends Reader {}

class Student extends Reader {}

class GeneralPublic extends Reader {}

...那么你的构造函数只需要一个参数,基类:


public function __construct(Book $bookRequested, Reader $reader) {}

要配置东西,您只需创建一个属性或方法。如果您选择一种方法,您也可以将其抽象化:


abstract class Reader

    abstract public function getMaxBooks();

}


class Teacher extends Reader

{

    public function getMaxBooks() {

        return 10;

    }

}


查看完整回答
反对 回复 2021-10-08
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信