我正在尝试使用接口或子类在我对方法参数使用类提示并不断收到以下警告的情况下工作:
$print_r(class_parents($listing));
$propertyTable -> getPhotos($listing);
Array ( [Tools\Object\Property] => Tools\Object\Property )
Catchable fatal error: Argument 1 passed to Tools\Db\PhotoTable::getPhotos() must be an
instance of Tools\Db\Property, instance of Tools\Object\Listing given, called in ...
and defined in ...
这很奇怪,正如您在测试列表扩展属性时看到的那样(见下文)。为什么我会收到此错误?
我已经建立了一个非常基本的测试用例,并发现类型提示应该接受一个子类或一个实现所需类的类,其中该类是一个接口。但是,在名称空间 Zend Framework 2 环境中,我无法让它工作。
我的各种类的代码如下所示:
namespace Tools\Db;
class PhotoTable
{
public function getPhotos(Property $propertyObject )
{
//code goes here
}
}
namespace Tools\Object;
use Tools\Object\PhotoInterface as PhotoInterface;
class property //implements photoInterface
{
public function getUrl(){ code goes here}
public function getPhotos(){ code goes here}
}//end class
use Tools\Object\PhotoInterface as PhotoInterface;
class Listing extends Property implements PhotoInterface
{
//code goes here
}
namespace Tools\Object;
interface PhotoInterface
{
public function getUrl();
public function getPhotos();
}
如果我将所有这些复制到一个文件中并消除命名空间,我可以让上面的代码工作。基本上:
- 如果我需要 PhotoTable 中的属性,我可以传递列表,因为它扩展了属性。
- 如果我需要 PhotoInterface,我可以传递列表,因为它实现了这个接口。
但是当我在名称空间 Zend Framework 2 环境中的不同文件中具有基本相同的类时,我得到了这个奇怪的错误。
在我需要考虑的名称空间环境中是否有额外的复杂性,或者我错过了一些非常基本的东西。