Php 为什么接口别名在函数参数中的行为不同?
在PHP中,接口别名似乎不像我期望的那样工作 这是我应该在生产代码中避免的未记录特性吗?或者在PHP中有没有最佳的接口别名实践 所有PHP文档似乎都在说,您可以创建别名,并且没有指定接口的任何独特之处: “所有支持名称空间的PHP版本都支持三种 别名或导入:别名类名,别名接口 名称和名称空间名称的别名。“Php 为什么接口别名在函数参数中的行为不同?,php,oop,Php,Oop,在PHP中,接口别名似乎不像我期望的那样工作 这是我应该在生产代码中避免的未记录特性吗?或者在PHP中有没有最佳的接口别名实践 所有PHP文档似乎都在说,您可以创建别名,并且没有指定接口的任何独特之处: “所有支持名称空间的PHP版本都支持三种 别名或导入:别名类名,别名接口 名称和名称空间名称的别名。“ 此类型指的是\RootNamespace\ChildNamespace\ISomeInterface,而不是\ChildNamespace\ISomeInterface是否可以显示某些接口
此类型指的是\RootNamespace\ChildNamespace\ISomeInterface
,而不是\ChildNamespace\ISomeInterface
是否可以显示某些接口的实现的代码?已更新--我无法显示触发此不一致性的实际代码,因为它是私有的,但这应该会重现问题。稍后我将验证此代码是否触发它。
<?php namespace RootNamespace;
use ChildNamespace\ISomeInterface as ISomeInterface;
use ChildNamespace\ImplementationOfSomeInterface as ImplementationOfSomeInterface;
class App {
public static function SomeFunc(ISomeInterface $i) {
return $i;
}
public static function SomeOtherFunc(ChildNamespace\ISomeInterface $i) {
return $i;
}
}
$i = new ImplementationOfSomeInterface();
// Throws Catchable fatal saying that ImplementationOfSomeInterface != ISomeInterface
App::SomeFunc($i);
// Works as 'expected'
App:SomeOtherFunc($i);
<?php namespace RootNamespace\ChildNamespace;
interface ISomeInterface {
public function RequiredFunc($param);
}
class ImplementationOfSomeInterface implements ISomeInterface {
public function RequiredFunc($param) {
return $param;
}
}
public static function SomeOtherFunc(ChildNamespace\ISomeInterface $i)