Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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_Theory - Fatal编程技术网

Php 对象责任-列表和项目

Php 对象责任-列表和项目,php,theory,Php,Theory,我的问题更像是一个理论问题 假设您有一个对象,它表示某事物的列表(文章、页面、帐户等) 您有一个类,它表示集合中的特定项: class objItem 我在思考每个对象的基本职责时遇到问题 哪个类负责创建新的objItem 哪个类负责删除对象?它是否应该将自身作为一种方法删除 更新1: Techpriester:可以使用对象的构造函数作为函数来创建新项吗? 我这样想: class objItem { public function __construct($id = 0) {

我的问题更像是一个理论问题

假设您有一个对象,它表示某事物的列表(文章、页面、帐户等)

您有一个类,它表示集合中的特定项:

class objItem
我在思考每个对象的基本职责时遇到问题

哪个类负责创建新的
objItem

哪个类负责删除对象?它是否应该将自身作为一种方法删除


更新1: Techpriester:可以使用对象的构造函数作为函数来创建新项吗? 我这样想:

class objItem {
    public function __construct($id = 0) {
        if ($id > 0) {
            // load item data...
        } else {
            // make new item...
        }
    }
}

但是,如果代码中出现错误,而不是传递$id>0,而是传递0,该怎么办?在这种情况下,更期望的行为是一个空对象,而不是新对象,或者我错了吗?

一种思考方式:

objItem
通常具有类构造函数,因此该类可能负责创建类型为
objItem
的对象


当一个
objItem
被插入到一个列表/集合中时,比如说
objCollection
它可以
objCollection
负责从集合中删除它。

一种思考方法:

objItem
通常具有类构造函数,因此该类可能负责创建类型为
objItem
的对象


当一个
objItem
被插入到一个列表/集合中时,比如说
objCollection
它可以
objCollection
从集合中删除它的责任。

因为一个对象不能删除自己,所以必须是集合的责任

是否让集合创建它的对象,如
$collection->makeNewItem()
(然后调用items构造函数)或使用
$item=newitem()直接,然后是一些
$collection->addItem($item)方法完全取决于您和应用程序的需要


如果项目本身也在集合之外使用,我建议使用常规实例化。

由于对象无法删除自身,因此必须由集合负责

是否让集合创建它的对象,如
$collection->makeNewItem()
(然后调用items构造函数)或使用
$item=newitem()直接,然后是一些
$collection->addItem($item)方法完全取决于您和应用程序的需要

如果项目本身也在集合之外使用,我建议使用常规实例化

objItem通常有一个类 所以这个类是 负责创建 键入objItem

建造师与责任无关(通常)。这样想,每个物体都只对自己负责

责任是一个与类层次结构没有直接联系的概念

如果:

ObjCollection=Nest objItem=Egg。还有第三个目标鸟,然后鸟负责创建egs(即使鸟巢里有蛋)。这不是关于编程,而是关于常识…:)

没有“空物体”这样的东西。对象具有“状态”。你可以创建一个对象,然后你就拥有了它,或者你可以不创建它,然后就没有对象了

您需要担心的是,在创建新对象和不创建新对象的情况下,构造函数是否在这两种情况下都能正常工作

通常最好将对象作为构造函数参数(而不是$id)注入,而不要在另一个对象中创建它

objItem通常有一个类 所以这个类是 负责创建 键入objItem

建造师与责任无关(通常)。这样想,每个物体都只对自己负责

责任是一个与类层次结构没有直接联系的概念

如果:

ObjCollection=Nest objItem=Egg。还有第三个目标鸟,然后鸟负责创建egs(即使鸟巢里有蛋)。这不是关于编程,而是关于常识…:)

没有“空物体”这样的东西。对象具有“状态”。你可以创建一个对象,然后你就拥有了它,或者你可以不创建它,然后就没有对象了

您需要担心的是,在创建新对象和不创建新对象的情况下,构造函数是否在这两种情况下都能正常工作


通常最好是将对象作为构造函数参数(而不是$id)注入,而不是在另一个对象中创建它。

我知道这并不能回答您的问题,但既然您将其标记为PHP,我将假设它几乎肯定会应用于某种数据库模型

在这种情况下,完全取消“集合”可能是一个更好的主意,因为如果您让每个类只表示一个对象,例如,如果您想查看10篇博客文章,您将调用10个单独的SELECT查询,每个查询只检索一条单独的数据库记录,因为您决定让“BlogPost”类封装其检索方法

另一种方法是让类表示一个或多个记录,这样,无论是检索5000条记录还是只检索一条记录,您只需要运行一个SELECT查询。几乎每个人都这样做


在进行面向对象编程时,最好考虑行为责任而不是对象是否是有形的“东西”。这就是OOP理论讨论的问题。使用类似于动物和水果的类比是很有诱惑力的,它们与现实编程几乎没有什么关联。

我知道这并不能回答你的问题,但既然你将其标记为PHP,我就不这么做了
class objItem {
    public function __construct($id = 0) {
        if ($id > 0) {
            // load item data...
        } else {
            // make new item...
        }
    }
}