memio / model
Memio的模型,用于描述生成代码
3.0.1
2024-08-13 05:52 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpspec/phpspec: ^6.1 || ^7.0
README
通过构建“模型”对象来描述PHP代码(类/接口及其常量、属性、方法、方法参数甚至PHPdoc)。
注意:此包是Memio的一部分,Memio是一个高度意见化的PHP代码生成器。请查看主仓库。
安装
使用Composer进行安装
composer require memio/model:^3.0
示例
假设我们想描述以下方法
/** * @api */ public function doSomething(ValueObject $valueObject, int $type = self::TYPE_ONE, bool $option = true);
为此,我们需要编写以下内容
<?php require __DIR__.'/vendor/autoload.php'; use Memio\Model\Argument; use Memio\Model\Method; use Memio\Model\Phpdoc\ApiTag; use Memio\Model\Phpdoc\MethodPhpdoc; use Memio\Model\Phpdoc\ParameterTag; $method = (new Method('doSomething')) ->setPhpdoc((new MethodPhpdoc()) ->addParameterTag(new ParameterTag('Vendor\Project\ValueObject', 'valueObject')) ->addParameterTag(new ParameterTag('int', 'type')) ->addParameterTag(new ParameterTag('bool', 'option')) ->addApiTag(new ApiTag()) ) ->addArgument(new Argument('Vendor\Project\ValueObject', 'valueObject')) ->addArgument((new Argument('int', 'type')) ->setDefaultValue('self::TYPE_ONE') ) ->addArgument((new Argument('bool', 'option')) ->setDefaultValue('true') ) ;
通常模型不会像这样手动描述,它们会动态构建
// Let's say we've received the following two parameters: $methodName = 'doSomething'; $arguments = [new \Vendor\Project\ValueObject(), ValueObject::TYPE_ONE, true]; $method = new Method($methodName); $phpdoc = (new MethodPhpdoc())->setApiTag(new ApiTag()); $index = 1; foreach ($arguments as $rawArgument) { $type = is_object($rawArgument) ? get_class($argument) : gettype($rawArgument); $name = 'argument'.$index++; $argument = new Argument($type, $name); $method->addArgument($argument); $phpdoc->addParameterTag(new ParameterTag($type, $name)); } $method->setPhpdoc($phpdoc);
我们可以使用配置文件、用户输入、现有源代码等动态构建模型。可能性是无限的!
一旦构建了这些模型,可以进一步调整,并转换为其他格式:数组、源代码等。再次,可能性是无限的!
请查看主仓库以发现Memio的全部功能。
想了解更多吗?
Memio使用phpspec,这意味着测试也提供了文档。您还不信吗?那么请克隆此仓库并运行以下命令
composer install
./vendor/bin/phpspec run -n -f pretty
您可以使用以下方式查看当前和过去版本
- 使用
git tag
命令 - 使用Github上的发布页面
- 列出版本之间变更的文件(CHANGELOG.md)
最后是一些元文档
路线图
- 移除
Type
- 从
FullyQualifiedName
中提取Import
(使用语句) - 移除
FullyQualifiedName
- 支持更多的PHPdoc功能
- 支持注解