有关介绍,请参阅PHP 中的类是什么?
对于答案,我将特别解决您的问题。搜索粗体字词以了解有关其含义的更多信息。
我对 PHP 对象的理解是它应该代表一个实体,提供获取和更改该实体属性的方法。
实体只是对象的一种可能用途。但也有Value Objects、Service Objects、Data Access Objects等等——当你走 OO 路线时,一切都会是一个有一定责任的对象。
让我有些困惑的是,像 CodeIgniter 这样的库在这个庄园中不使用对象。
是的,Code Igniter 并没有真正接受 OOP。他们更多地使用基于类的编程方法,这更像是使用类和少量 OOP 进行程序编程。
他们将类更像是一组函数的包装器。因此,CodeIgniter 中的“帖子”类不会保存一篇帖子的属性,它会提供获取、编辑和删除帖子的功能。
不过那很好。一个帖子类可以是Repository,例如一个帖子实体的内存集合,它具有在后台检索和持久化这些实体的额外责任。我会谨慎使用Design Patterns和 Code Igniter,因为众所周知它们使用自己的模式解释(例如,它们的Active Record更像是Query Object)。
那么如果我想从数据库中取出每篇文章并将其放入 Post 对象中会发生什么?
这里有很多选择。一种常见的方法是使用Data Mapper,但您也可以使用 PDO 并将数据行直接提取到 Post 对象等中。
我对它的理解是,我实际上需要两个类“Posts”和“Post”,一个定义 Post 对象,另一个处理从数据库中获取 Posts 并将它们放入 Post 对象。
那将是前面提到的存储库或数据映射器方法。您通常将这些与Table Data Gateway结合使用。但是,另一种选择也可能是不具有 Posts 类并使用Active Record模式,它将数据库中的一行表示为附加了业务和持久性逻辑的对象。
这两种类型的类是否有名称(“正确”对象/函数集合)?让两个类像这样一起工作是否很常见,或者我完全误解了如何使用对象?
是的,他们一起工作。OOP 是关于对象协作的。
在我的 Posts 类中使用一个名为 getSinglePost($id) 的方法而不是使用 Post 对象是否更有意义,它只返回一个数组?
那将是一个返回Record Sets的表数据网关。当您没有大量业务逻辑并且可以保留Domain Model时,这很好,例如在CRUD应用程序中