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();
}
可能重复的