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 - Fatal编程技术网

Php 为什么接口别名在函数参数中的行为不同?

Php 为什么接口别名在函数参数中的行为不同?,php,oop,Php,Oop,在PHP中,接口别名似乎不像我期望的那样工作 这是我应该在生产代码中避免的未记录特性吗?或者在PHP中有没有最佳的接口别名实践 所有PHP文档似乎都在说,您可以创建别名,并且没有指定接口的任何独特之处: “所有支持名称空间的PHP版本都支持三种 别名或导入:别名类名,别名接口 名称和名称空间名称的别名。“ 此类型指的是\RootNamespace\ChildNamespace\ISomeInterface,而不是\ChildNamespace\ISomeInterface是否可以显示某些接口

在PHP中,接口别名似乎不像我期望的那样工作

这是我应该在生产代码中避免的未记录特性吗?或者在PHP中有没有最佳的接口别名实践

所有PHP文档似乎都在说,您可以创建别名,并且没有指定接口的任何独特之处:

“所有支持名称空间的PHP版本都支持三种 别名或导入:别名类名,别名接口 名称和名称空间名称的别名。“



此类型指的是
\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)