Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Class_Many To Many - Fatal编程技术网

Php 在面向对象编程中,哪个对象应该保持多对多关系?(如有)

Php 在面向对象编程中,哪个对象应该保持多对多关系?(如有),php,oop,class,many-to-many,Php,Oop,Class,Many To Many,我将用一个例子来说明这一点: class Company { } class Person { } 公司和个人之间存在多对多关系。一个人可以属于多个公司,公司可以容纳多个人 然后我是否需要创建第三个类: class CompanyPerson { } 或者公司是否应处理该问题: class Company { function add_person() { } } 或者人应该这样做 class Person { function add_to_compan

我将用一个例子来说明这一点:

class Company {

}

class Person {

}
公司
个人
之间存在多对多关系。一个
可以属于多个
公司
公司
可以容纳多个

然后我是否需要创建第三个类:

class CompanyPerson {

}
或者公司是否应处理该问题:

class Company {
    function add_person() {

    }
}
或者
人应该这样做

class Person {
    function add_to_company() {

    }
}

可以使用“关联类”对
个人
公司
实例的某些随机组合所共有的属性进行建模

UML中对此有一个表示法,在可扩展编程语言中创建这样一个概念并不困难

其思想是,任何由
公司
组成的随机对象对都有一种关系,而这种关系本身就是一个对象。它既不是
也不是
公司
,而是与特定
公司
实例之间的连接相关联的东西

这些东西(属性、方法)构成了一个类:
Person-Company
association类

我以前在Lisp中做过这项工作,使用一些宏为给定的一对类定义关联类,使用全局弱哈希表将对象对映射到它们的关联类对象(因此,对于给定的个人和公司,可以检索关联,当这些对象变成垃圾时,关联就会消失)


使用列表或其他关联数据结构,特定公司和人员之间的实际链接很容易。person对象可以有公司列表,反之亦然。关联类思想解决了将person-company内容放在何处的问题。例如,每个
person
公司中都有一个角色ode>(比如说)我们不能在一个
中有一个
角色
变量,因为它可以在许多公司中有许多角色。我们当然不能在公司中有一个
角色
,因为它甚至不是一个人;它有与之相关的人,他们都有角色。这个角色可以进入关联:问题解决了。

这完全取决于你u使用场景

如果您只需要查找为公司工作的人员,请存储该公司的人员列表;如果您只需要查找为其工作的公司,请将其存储在那里


迟早你可能会发现你需要为实际的人际关系建模,然后你会创建一个单独的类来表示它。现在你可以处理添加属性,比如雇佣开始的日期、雇佣结束的日期等等。

我认为你不需要第三个类

想想ORM(Doctrin for php,Hybernate for n java)的功能:

在这种情况下,在数据库层上有3个表:

Company、User和Company_User(将表beetween User和Company连接起来,说明哪个用户和哪个公司)

您还可以仅使用两个db表来映射这种情况:

Company、user和in-user都有一个指向Company的引用。因此,根据这个引用,您可以说用户所属的公司

最后,关于课堂设计,我认为:

  • 类company可以保存用户数组(属于该公司的用户列表)
  • 类用户可以持有对公司(用户所属公司)的引用

这取决于用例,但通常可以使用引用类部署多对多对象关系

class CompanyPersonRelationship {
    public $company;
    public $person;
}
所以现在,公司和个人都可以跟踪他们的关系

class Company {
   public $persons = array();   
}

class Person {
   public $companies = array();
}
可能重复的