0

0

如何告别重复的PHP代码编写?krlove/code-generator助你实现代码自动化生成

PHPz

PHPz

发布时间:2025-09-04 16:28:37

|

443人浏览过

|

来源于php中文网

原创

可以通过一下地址学习composer学习地址

告别重复劳动:我的PHP代码生成之旅

你有没有遇到过这样的情况?项目里需要大量的dto(数据传输对象)、实体类或者api响应模型。这些类通常结构相似,包含着一堆属性(properties)、getter/setter方法,可能还有一些简单的构造函数和phpdoc注释。每次从数据库表或者api文档生成这些类时,你是不是都得手动创建文件、逐个定义属性、方法,还要小心翼翼地加上各种类型提示和phpdoc注释?

对我来说,这简直是开发过程中最枯燥、最耗时也最容易出错的环节。特别是当一个项目有几十个甚至上百个这样的类,每个类又有几十个字段时,那种感觉就像在无尽的复制粘贴中挣扎。改一个字段名,可能要牵连好几个文件;调整一个类型,又得小心翼翼地检查所有相关代码。我一直在想,如果能有一种方法,可以自动化地生成这些重复性的代码该多好?

Composer与
krlove/code-generator
:我的救星

就在我为这些重复劳动感到头疼时,Composer 和一个神奇的库——

krlove/code-generator
帮我彻底解决了这个问题。

Composer,作为PHP的依赖管理工具,它的强大之处在于能让我们轻松地集成各种优秀的开源库到项目中。而

krlove/code-generator
,正是这样一个专门用于生成PHP代码的工具,尤其擅长生成PHP类文件。

它的核心思想是:你可以通过编程的方式,像搭积木一样构建一个PHP类的各个组成部分,然后让它帮你把这些组件“渲染”成完整的PHP代码。

立即学习PHP免费学习笔记(深入)”;

如何使用
krlove/code-generator
解决问题?

首先,通过Composer将其安装到你的开发环境中(注意,它通常只在开发环境使用,所以我们加上

--dev
):

composer require krlove/code-generator --dev

安装完成后,你就可以开始“组装”你的PHP类了。

krlove/code-generator
提供了一系列模型(Model)来代表PHP代码中的各种元素,比如:

Loomi
Loomi

全球首个AI社媒内容多智能体系统

下载
  • ClassModel
    :代表整个PHP类。
  • NamespaceModel
    :定义命名空间。
  • ClassNameModel
    :定义类名,包括继承和实现的接口。
  • UseClassModel
    :添加
    use
    语句。
  • PropertyModel
    :定义类的属性(包括可见性、默认值、PHPDoc等)。
  • MethodModel
    :定义类的方法(包括可见性、参数、方法体、PHPDoc等)。
  • ConstantModel
    :定义类常量。
  • DocBlockModel
    :为类、属性、方法添加PHPDoc注释。
  • VirtualPropertyModel
    VirtualMethodModel
    :用于在PHPDoc中声明“魔术”属性和方法。

我们来看一个简化的例子,假设我们要根据一个数据库表结构,动态生成一个User实体类:

<?php

require 'vendor/autoload.php';

use KrloveCodeGeneratorModelArgumentModel;
use KrloveCodeGeneratorModelClassModel;
use KrloveCodeGeneratorModelDocBlockModel;
use KrloveCodeGeneratorModelMethodModel;
use KrloveCodeGeneratorModelNamespaceModel;
use KrloveCodeGeneratorModelPropertyModel;

// 模拟从数据库获取的字段信息
$fields = [
    ['name' => 'id', 'type' => 'int', 'default' => null, 'comment' => '用户ID'],
    ['name' => 'username', 'type' => 'string', 'default' => '', 'comment' => '用户名'],
    ['name' => 'email', 'type' => 'string', 'default' => '', 'comment' => '用户邮箱'],
    ['name' => 'createdAt', 'type' => '\DateTimeImmutable', 'default' => 'new \DateTimeImmutable()', 'comment' => '创建时间'],
];

$phpClass = new ClassModel();
$phpClass->setNamespace(new NamespaceModel('App\Model')); // 设置命名空间
$phpClass->setName('User'); // 设置类名

// 添加属性和对应的getter方法
foreach ($fields as $field) {
    $property = new PropertyModel($field['name'], 'private');
    $property->setDocBlock(new DocBlockModel('@var ' . $field['type'] . ' ' . $field['comment']));
    if ($field['default'] !== null) {
        $property->setDefaultValue($field['default']);
    }
    $phpClass->addProperty($property);

    // 添加getter方法
    $methodName = 'get' . ucfirst($field['name']);
    $methodBody = 'return $this->' . $field['name'] . ';';
    $method = new MethodModel($methodName, 'public', $methodBody);
    $method->setDocBlock(new DocBlockModel('@return ' . $field['type']));
    $phpClass->addMethod($method);
}

// 最后,调用 render() 方法,它就会将你构建的模型转化为标准的PHP代码字符串
echo $phpClass->render();

输出结果大致会是这样:

<?php

namespace AppModel;

class User
{
    /**
     * @var int 用户ID
     */
    private $id;

    /**
     * @var string 用户名
     */
    private $username = '';

    /**
     * @var string 用户邮箱
     */
    private $email = '';

    /**
     * @var DateTimeImmutable 创建时间
     */
    private $createdAt = new DateTimeImmutable();

    public function getId(): int
    {
        return $this->id;
    }

    public function getUsername(): string
    {
        return $this->username;
    }

    public function getEmail(): string
    {
        return $this->email;
    }

    public function getCreatedAt(): DateTimeImmutable
    {
        return $this->createdAt;
    }
}

通过这种方式,我们只需要定义好数据的结构,就可以自动化地生成一个完整且符合规范的PHP类。这比手动敲代码要快得多,也准确得多!

优势与实际应用效果

使用

krlove/code-generator
带来的好处是显而易见的:

  1. 效率大幅提升:告别枯燥乏味的手动重复劳动,将宝贵的时间投入到更具创造性的业务逻辑开发中。
  2. 减少错误:机器生成代码可以避免手写代码时常出现的拼写错误、语法错误和PHPDoc注释遗漏。
  3. 代码一致性:确保所有生成的类都遵循统一的代码风格、命名规范和注释标准,提升项目整体的可维护性。
  4. 自动化集成:可以轻松集成到自动化脚本、CI/CD流程中,实现数据库 schema 变更后自动更新实体类,或根据API文档自动生成客户端模型。
  5. 灵活性:你可以根据不同的输入源(如数据库表、JSON/YAML配置文件、OpenAPI规范等)定制生成逻辑,满足各种复杂需求。

在实际项目中,我将它应用到了以下场景:

  • ORM实体生成:根据数据库表结构自动生成Eloquent或Doctrine实体类。
  • API客户端模型:从Swagger/OpenAPI定义中解析数据结构,生成对应的请求/响应DTO。
  • 领域驱动设计(DDD)中的值对象(Value Objects)和聚合根(Aggregate Roots):为它们生成基础的结构和方法。
  • 数据迁移和测试用例的辅助生成:快速创建结构化的数据对象。

现在,当我需要一个新的DTO或者实体类时,我不再需要从零开始敲代码,而是运行一个简单的脚本,瞬间就能得到一个结构完整、规范的PHP类文件。这不仅节省了大量时间,更让我的开发体验变得更加流畅和愉快。

如果你也厌倦了PHP项目中那些重复性的代码编写工作,不妨试试

krlove/code-generator
。它会成为你开发工具箱中不可或缺的利器!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

162

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

83

2025.09.10

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 7.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号