我有一个特殊的用例,我希望子接口对其返回值有约束,而父接口却没有。所以,例如:
interface FooInterface
{
/**
* @return mixed
*/
public function foo();
}
interface IntegerOnlyFooInterface extends FooInterface
{
/**
* @return integer
*/
public function foo();
}
在此示例中,IntegerOnlyFooInterface
仅返回对foo()
的调用的整数。因为整数也是标量,所以这并不会破坏从FooInterface
继承的合同,并且满足Liskov Substitution Principle,因为IntegerOnlyFooInterfaces
可以在需要FooInterface
的任何地方使用实例没有破坏应用程序中的任何内容。
有些地方我希望强制整数返回值作为代码合同的一部分,所以在那些地方我会输入IntegerOnlyFooInterface
。
但这似乎很狡猾,而且我想知道我是否以错误的方式处理问题,或者它是否在上升和下降。