ebln / phpstan-factory-rule
PHPStan 规则,强制通过工厂进行实例化
v1.0.0
2024-06-07 11:36 UTC
Requires
- php: 7.4 - 8.4
- ebln/phpstan-factory-mark: ^1.1
- phpstan/phpstan: ^1.11
Requires (Dev)
- ergebnis/composer-normalize: ^2.15
- phpmd/phpmd: ^2.10
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- vimeo/psalm: ^5.24
This package is not auto-updated.
Last update: 2024-09-22 17:32:07 UTC
README
确保您的类只能通过您定义的工厂进行实例化!
支持属性的使用方法
需要此包:composer require --dev ebln/phpstan-factory-rule
将ForceFactory
属性添加到您的类中,并提供所有类名作为参数,这些参数应允许实例化您的对象。
<?php // […] #[\Ebln\Attrib\ForceFactory(GoodFactory::class, BetterFactory::class)] class OnlyViaFactory { }
现在放松一下,并依靠CI管道、git钩子或IDE集成中的PHPStan;如果有人引入了一个恶意工厂
<?php // […] class FailingFactory { public function create(): OnlyViaFactory { return new OnlyViaFactory(); } }
…当你运行PHPStan时应该失败。
已弃用的ebln/phpstan-factory-mark
使用方法
通过Composer安装此扩展和包含标记接口的包,同时与PHPStan一起使用
composer require ebln/phpstan-factory-mark composer require --dev ebln/phpstan-factory-rule
使用您想要保护的DTO实现\Ebln\PHPStan\EnforceFactory\ForceFactoryInterface
。
<?php // […] use Ebln\PHPStan\EnforceFactory\ForceFactoryInterface; class OnlyViaFactory implements ForceFactoryInterface { // […] public static function getFactories(): array { // Return a list of classes that are allowed to // create new OnlyViaFactory instances… return [TheOnlyTrueFactory::class]; } }
现在依靠CI管道、git钩子或IDE集成中的PHPStan。
如果有人引入了一个恶意工厂
<?php // […] class FailingFactory { public function create(): OnlyViaFactory { return new OnlyViaFactory(); } }
…当你运行PHPStan时应该失败。
安装
通过Composer安装此扩展
composer require --dev ebln/phpstan-factory-rule
如果您还安装了phpstan/extension-installer,那么您就准备就绪了!
手动安装
如果您不想使用phpstan/extension-installer
,只需在项目的PHPStan配置中指定此规则即可
rules:
- \Ebln\PHPStan\EnforceFactory\ForceFactoryRule