# 贡献指南

感谢你能够看到这里，本项目非常欢迎你的贡献！

## 贡献方法

如果你有代码或文档要贡献，以下是你需要首先了解的内容。

1. 你要贡献什么类型的代码？（新扩展、修复 Bug、安全问题、项目框架优化、文档）
2. 如果你贡献了新文件或新片段，你的代码是否经过 `php-cs-fixer` 和 `phpstan` 的检查？
3. 在贡献代码前是否充分阅读了 [开发指南](../develop/)？

如果你能回答上述问题并对代码进行了修改，可以及时在项目 GitHub 仓库发起 Pull Request。
代码审查完成后，可以根据建议修改代码，或直接合并到主分支。

## 贡献类型

本项目的主要目的是编译静态链接的 PHP 二进制文件，命令行处理功能基于 `symfony/console` 编写。
在开发之前，如果你对它不够熟悉，请先查看 [symfony/console 文档](https://symfony.com/doc/current/components/console.html)。

### 安全更新

因为本项目基本上是一个本地运行的 PHP 项目，一般来说不会有远程攻击。
但如果你发现此类问题，请**不要**在 GitHub 仓库提交 PR 或 Issue，
你需要通过 [邮件](mailto:admin@zhamao.me) 联系项目维护者（crazywhalecc）。

### 修复 Bug

修复 Bug 一般不涉及项目结构和框架的修改，所以如果你能定位到错误代码并直接修复它，请直接提交 PR。

### 新扩展

对于添加新扩展，你需要了解项目的一些基本结构以及如何根据现有逻辑添加新扩展。
这将在本页的下一节中详细介绍。
总的来说，你需要：

1. 评估扩展是否可以内联编译到 PHP 中。
2. 评估扩展的依赖库（如果有）是否可以静态编译。
3. 编写不同平台的库编译命令。
4. 验证扩展及其依赖项与现有扩展和依赖项兼容。
5. 验证扩展在 `cli`、`micro`、`fpm`、`embed` SAPIs 中正常工作。
6. 编写文档并添加你的扩展。

### 项目框架优化

如果你已经熟悉 `symfony/console` 的工作原理，并同时要对项目的框架进行一些修改或优化，请先了解以下事情：

1. 添加扩展不属于项目框架优化，但如果你在添加新扩展时发现必须优化框架，则需要先修改框架本身，然后再添加扩展。
2. 对于一些大规模逻辑修改（例如涉及 LibraryBase、Extension 对象等的修改），建议先提交 Issue 或 Draft PR 进行讨论。
3. 在项目早期，它是一个纯私有开发项目，代码中有一些中文注释。项目国际化后，你可以提交 PR 将这些注释翻译为英语。
4. 请不要在代码中提交更多无用的代码片段，例如大量未使用的变量、方法、类以及多次重写的代码。
