猿问

验证构造函数中的参数

我正在开发一个图书馆管理系统,基本上我有一个抽象类“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');

    }

}


慕斯王
浏览 144回答 2
2回答

蛊毒传说

我希望如果我能提供帮助,您可以在验证时检查类类型。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();

DIEA

我不确定为什么在同一个请求中需要所有三个读者,因为只有其中一个会涉及给定的事务。如果你有这个: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;    }}
随时随地看视频慕课网APP
我要回答