Class Circular Dependency
我看到下面的一段PHP代码,声明了一些接口、抽象类和具体类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public interface MyInterface { public function method1() : MyAbstractClass; } abstract class MyAbstractClass implements MyInterface { protected $myVar = 1; } public class MyClass1 extends MyAbstractClass { function method1(): MyAbstractClass { return new MyClass1(); } } public class MyClass2 extends MyAbstractClass { function method1(): MyAbstractClass { return new MyClass2(); } } |
一些评论员认为存在循环依赖关系,因此,
是这样吗?
我会把这个作为评论发表,但这是一个长期的阅读。
我想两者本身都不是"错"的。但看起来"正确的"应该是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public interface MyInterface { public function method1() : self; } abstract class MyAbstractClass implements MyInterface { protected $myVar = 1; } public class MyClass1 extends MyAbstractClass { function method1(): self // yes, you can return self { return $this; } } public class MyClass2 extends MyAbstractClass { function method1(): self { return $this; } } |
接口中返回self的理由是,实现该接口并始终返回
如果要在接口中返回
您还可以返回接口,这也非常好。实际上,在某种程度上,它似乎"更好"或"更正确",但最终归结为
我的2美分。后一个关于
很遗憾,PHP还没有将
也可以看到这个问题
php 7接口,返回类型提示和self
公认的答案是有道理的。