创建工厂 class?
Creating a factory class?
我找到了这段代码:
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。
PHP Class Constants
::class
returns FQCN(完全限定 Class 名称),例如“\Namespace\Path\To\Classname”。
ZF2 - 3 个工厂
在准备 ZF3 时,使用 __invoke(ContainerInterface $container)
代替 createService(ServiceLocatorInterface $serviceManager)
变得很普遍。
它被用作您习惯的默认工厂,被替换为另一个实现另一个接口的工厂,但为 ZF2 到 ZF3 的过渡留有空间。
ZF3 中的标准工厂 class 如下所示:
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(已发布 halfway 2014),如果没记错的话)。因此,以上内容可能过于繁琐,我建议您向同事或具有更多 Zend Framework 开发经验的人寻求帮助。
我找到了这段代码:
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。
PHP Class Constants
::class
returns FQCN(完全限定 Class 名称),例如“\Namespace\Path\To\Classname”。
ZF2 - 3 个工厂
在准备 ZF3 时,使用 __invoke(ContainerInterface $container)
代替 createService(ServiceLocatorInterface $serviceManager)
变得很普遍。
它被用作您习惯的默认工厂,被替换为另一个实现另一个接口的工厂,但为 ZF2 到 ZF3 的过渡留有空间。
ZF3 中的标准工厂 class 如下所示:
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(已发布 halfway 2014),如果没记错的话)。因此,以上内容可能过于繁琐,我建议您向同事或具有更多 Zend Framework 开发经验的人寻求帮助。