ebln/phpstan-factory-rule

PHPStan 规则,强制通过工厂进行实例化

安装次数: 15,478

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 1

分支: 0

开放问题: 0

类型:phpstan-extension

v1.0.0 2024-06-07 11:36 UTC

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