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

Php 继承层次结构中有重载构造函数是否意味着需要组合?

Php 继承层次结构中有重载构造函数是否意味着需要组合?,php,oop,design-patterns,Php,Oop,Design Patterns,假设我有一个用户类,它具有基本属性,如名字、姓氏、地址等。从这个用户类中,我有内部员工、顾问和客户的子类型,所有这些都需要额外的属性,因此需要向构造函数传递更多的参数,这将违反Liskov替代原则。我怎样才能解决这个看似基本的问题呢?您需要提供默认值​​对于所有新参数,这样我们就可以在没有它们的情况下调用构造函数,而不会得到任何新的异常 如果它不符合逻辑,不同的子类型确实需要不同的属性,根据LSP,我们不应该使用继承 例如,可以改为使用。据我所知,即使通过构造函数传递属性,也不会通过添加属性来更

假设我有一个用户类,它具有基本属性,如名字、姓氏、地址等。从这个用户类中,我有内部员工、顾问和客户的子类型,所有这些都需要额外的属性,因此需要向构造函数传递更多的参数,这将违反Liskov替代原则。我怎样才能解决这个看似基本的问题呢?

您需要提供默认值​​对于所有新参数,这样我们就可以在没有它们的情况下调用构造函数,而不会得到任何新的异常

如果它不符合逻辑,不同的子类型确实需要不同的属性,根据LSP,我们不应该使用继承


例如,可以改为使用。

据我所知,即使通过构造函数传递属性,也不会通过添加属性来更改功能。这里有一个例子:我不能互换地实例化不同的类型,所以这不会违反LSP吗?