Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中单个对象和多个对象类的接口或类型提示_Php_Oop - Fatal编程技术网

php中单个对象和多个对象类的接口或类型提示

php中单个对象和多个对象类的接口或类型提示,php,oop,Php,Oop,最近开始在PHP中使用OOP。遵循“代码到接口”原则,我对将单个对象或多个对象作为参数传递给方法时要使用的类型提示感到困惑 目前,我有一个“Student”类-表示我的students表中的一行,我还有一个“students”类,它在一个数组中保存多个Student对象。 为了获取一个学生的概要文件,我将学生对象(包含一个学生对象)传递给profile类。我在profile类中设置了一个学生类型提示 现在我觉得这是糟糕的代码,因为我有这样的行 student=新生() 学生=新生() 问题是,

最近开始在PHP中使用OOP。遵循“代码到接口”原则,我对将单个对象或多个对象作为参数传递给方法时要使用的类型提示感到困惑

目前,我有一个“Student”类-表示我的students表中的一行,我还有一个“students”类,它在一个数组中保存多个Student对象。 为了获取一个学生的概要文件,我将学生对象(包含一个学生对象)传递给profile类。我在profile类中设置了一个学生类型提示

现在我觉得这是糟糕的代码,因为我有这样的行

student=新生()
学生=新生()

问题是,

我走对了吗

如果我删除Students类并单独使用Student,那么根据原则,如果profile类接受Student类型提示,我如何将多个Student对象(假设为数组)传递给profile类

我有什么选择


谢谢。

与其重新发明轮子,不如试试或者至少看看它的架构

我不确定我是否得到你的确切问题。。。但是,如果您想编写自己的代码,我会首先抽象DB层,并使用一些基类,如数据库、表、行、字段来描述DB堆栈,并根据需要使用一些神奇的方法对它们进行扩展。所以,当您执行Student extends表时,它会自动检查“students”表或您想要实现的任何其他约定。或者,您可以将表名作为arg传递


任何从数据库返回结果集的对象都必须为每一行构造一个单行对象,并将其添加到一个行集合中,我将该行集合命名为ResultSet,并包含所有行对象并返回该集合。

如果由
学生
表示的是
学生
对象的集合,也许更好的名称应该是
StudentCollection
StudentSet

有两种方法可以解决类型提示问题:

  • StudentCollection
    上介绍一个名为
    ->getProfiles()
    的方法;它将通过调用
    Profile
    上的方法,为其管理的每个
    Student
    实例返回一个概要文件数组

  • Profile
    上引入一个(静态)方法,该方法对
    StudentCollection
    实例进行操作


  • 第一个选项有,这就是为什么我包含了一个变通方法。

    为什么使用Students类,您只能直接在Profil类中添加Student数组您的意思是我将profile类构造函数中的Student类型提示改为array。例如从这个u构造(Student$Student)改为这个u构造(array$Student)获取多个学生的个人资料是什么样子的?这有定义吗?它是否返回多个概要文件?当概要文件类接收到单个或多个学生对象集合时,它迭代并选取每个对象的ID,然后从数据库中获取概要文件并返回多个对象-每个学生一个概要文件。我的数据库抽象在Yii DAO中,我获取一行,实例化一个学生类,然后将其传递给Profile类。现在,如果我获取多行并使用此ResultSet实例化多个对象,我如何将其传递给Profile。我将使用第二个选项,这意味着我将使用StudentCollection表示单个或多个学生,并将此集合传递给我应用程序中的其他模块。可以吗?为什么这个方法是静态的?我打算为每个学生返回profile对象,即ParentProfile或medicalprofile。我认为,对于返回其定义的类的实例的方法来说,静态是有意义的。否则,您将不得不称之为ProfileFactory。