我正在尝试创建Developer
的子类Person
。
我希望他们两个都使用静态工厂模式(或“命名构造函数”)。
我已经看到了这种模式的一些示例,但是没有一个使用继承。
问题1
在示例中,它们使构造方法始终为私有。
可以对其进行保护以便从子构造方法中调用吗?
还是应该解决使构造函数始终私有的问题,并尝试从子项的create
方法调用父项的create
方法来构建继承的问题?
问题2
当我尝试实例化类Person或Developer时,出现以下错误。为什么?
PHP Fatal error: Declaration of Developer::create(string $name, string $surname, ?int $yearsOfExperience = NULL, ?string $preferredLanguage = NULL): Developer must be compatible with Person::create(string $name, string $surname): Person in InheritanceTest.php on line 57
当我同时删除两个: self
方法中的create
类型提示时,它可以工作,但是如果Developer
是{{1的子类, }}。
谢谢。
Person
答案 0 :(得分:0)
问题1:
在示例中,它们使构造方法始终为私有。 可以对其进行保护以便从子构造方法中调用吗?
您必须对其进行保护。否则,将不允许子级调用父级的方法。
问题2:
当我在两个create方法中都删除:self类型提示时,此方法有效,但是如果Developer是Person的子类,我不明白为什么它们不兼容。
尝试使用static
代替self
。它可能有效,但我不确定。但是您仍然会注意到(或警告,不记得了),因为Developer中的工厂方法具有与Person不同的参数。在PHP中允许这样做,但不建议这样做。