我找到了以下代码段:
class WebsitesTableFactory extends AbstractModelFactory
{
public function __invoke(ContainerInterface $container)
{
$dbAdapter = $container->get('bc_db');
$tableGateway = $this->initializeTableGateway('websites', $dbAdapter, null, $container->get(Websites::class));
return new WebsitesTable($tableGateway);
}
}
我已经习惯了:
FactoryInterface
而不是扩展AbstractModelFactory
ServiceLocatorInterface
作为createService
函数的参数这与该实现有何不同?
::class
是什么意思?
Zend版本为2.5。
答案 0 :(得分:1)
::class
返回FQCN(完全合格的类名),例如“ \ Namespace \ Path \ To \ Classname”。
在准备ZF3时,通常使用__invoke(ContainerInterface $container)
代替createService(ServiceLocatorInterface $serviceManager)
。
它曾经被用作您习惯的默认工厂,而被另一个实现了另一个接口的工厂取代,尽管为ZF2到ZF3的过渡留有空间。
ZF3中的标准Factory类如下:
use Zend\ServiceManager\Factory\FactoryInterface;
class DemoFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
// Do your thing
}
}
注意:与ZF2中不同的FactoryInterface
使用声明!
很显然,您仍在使用ZF2。我强烈建议您升级(或开始升级)到ZF3。您可以read the migration guide,但我建议您一次完成所有更新。
我的建议可能会导致您花费大量精力(可能取决于应用程序的大小),但是所有内容都是最新的。
我建议进入您的composer.json
并删除所有版本限制,然后使用composer update
将所有内容更新为最新版本。然后从那里去,由于过时的内容,您将遇到无尽的错误要修复。
(由于某些原因,某些软件包可能无法升级,请注意,如果您遵循上述建议,它们可能会导致意外的版本限制)。
另一方面,您不知道关于::class
返回FQCN的信息,这是非常基本和使用的标准,并且已经使用了很长时间(自PHP 5.6(发布{{3 }})(如果有记忆)。因此,以上内容可能会让人不知所措,建议您向同事或在Zend Framework开发方面有更多经验的人寻求帮助。