jd1*_*182 5 php oop class object application-design
我只是想知道是否有人可以帮助我理解如何在PHP中充分利用对象.
我对PHP对象的理解是应该代表一个实体,提供获取和改变该实体属性的方法.例如,名为Post的对象将保存单个帖子的所有属性,可以根据需要进行访问和修改.
让我感到困惑的是像CodeIgniter这样的库在这个庄园中不使用对象.他们将类更像是一组函数的包装器.所以CodeIgniter中的'Posts'类不会保存一个帖子的属性,它会提供获取,编辑和删除帖子的功能.
那么,如果我想从数据库中获取每个帖子并将其放入Post对象,会发生什么?我对它的理解是我实际上需要两个类'Posts'和'Post',一个定义Post对象,一个处理从数据库中获取Posts并将它们放入Post对象.
这两类类都有一个名称('正确'对象/函数集合)?有两个类这样一起工作或者我完全误解了如何使用对象是很常见的吗?
而不是拥有一个Post对象,在我的Posts类中有一个名为getSinglePost($ id)的方法只返回一个数组更有意义吗?
希望这个问题有意义,期待得到一些反馈.
有关介绍,请参阅PHP中的什么类?
对于答案,我将特别提出您的问题.以粗体搜索术语以了解有关其含义的更多信息.
我对PHP对象的理解是应该代表一个实体,提供获取和改变该实体属性的方法.
实体只是对象的一种可能用途.但是还有价值对象,服务对象,数据访问对象等 - 当你走OO路线时,一切都将成为一个具有一定责任感的对象.
让我感到困惑的是像CodeIgniter这样的库在这个庄园中不使用对象.
是的,Code Igniter并没有真正拥抱OOP.他们正在使用更多基于类的编程方法,这更像是使用类编程和少量OOP编程.
他们将类更像是一组函数的包装器.所以CodeIgniter中的'Posts'类不会保存一个帖子的属性,它会提供获取,编辑和删除帖子的功能.
那很好.帖子类可以是存储库,例如,后实体的内存中集合,其附加责任是在后台检索和持久化.我会对Design Patterns和Code Igniter 保持谨慎,因为他们已经知道使用他们自己的模式解释(例如他们的Active Record更像是一个查询对象).
那么,如果我想从数据库中获取每个帖子并将其放入Post对象,会发生什么?
这里有很多选择.一种常见的方法是使用Data Mapper,但您也可以使用PDO并将数据行直接提取到Post对象等.
我对它的理解是我实际上需要两个类'Posts'和'Post',一个定义Post对象,一个处理从数据库中获取Posts并将它们放入Post对象.
这将是前面提到的Repository或Data Mapper方法.您通常将这些与表数据网关结合使用.但是,另一种方法也可能是没有Posts类并使用Active Record模式,它将数据库中的一行表示为附加了业务和持久性逻辑的对象.
这两类类都有一个名称('正确'对象/函数集合)?有两个类这样一起工作或者我完全误解了如何使用对象是很常见的吗?
是的,他们一起工作.OOP是关于对象协作的全部内容.
而不是拥有一个Post对象,在我的Posts类中有一个名为getSinglePost($ id)的方法只返回一个数组更有意义吗?
这将是返回记录集的表数据网关.当你没有很多业务逻辑并且可以省去域模型时,这很好,就像在CRUD应用程序中一样