【发布时间】:2011-04-06 17:00:16
【问题描述】:
我正在处理一些基于 php 的项目,并且遇到了必须使用通用代码维护单独的代码库的问题。所有项目之间共享的公共代码是物理添加的(文件复制到文件夹中),当需要更改时,我们必须手动复制每个项目中公共代码功能中的修复。
在 java 中,我们可以创建一个库(jar 文件)并在不同的项目之间共享它。 PHP 5 中是否有任何与共享库相关的概念。
【问题讨论】:
标签: php libraries code-reuse
我正在处理一些基于 php 的项目,并且遇到了必须使用通用代码维护单独的代码库的问题。所有项目之间共享的公共代码是物理添加的(文件复制到文件夹中),当需要更改时,我们必须手动复制每个项目中公共代码功能中的修复。
在 java 中,我们可以创建一个库(jar 文件)并在不同的项目之间共享它。 PHP 5 中是否有任何与共享库相关的概念。
【问题讨论】:
标签: php libraries code-reuse
PHP 的 jar 版本称为 Phar: http://php.net/manual/en/book.phar.php
【讨论】:
将共享代码签入版本控制存储库并将其签出到项目中不是更容易吗?例如,SVN 支持 svn:externals property
【讨论】:
虽然 PHP 现在支持 phar 文件,但解决问题的正确方法是有效地使用包含文件(和路径)。
始终以相同的顺序搜索文件的包含路径 - 所以一个好的做法是定义 2 个层次结构,一个用于代码范围(例如,所有内容、应用程序、模块),另一个用于它所在的环境正在运行(保存相关 URL、数据库连接等,例如一切、环境(开发/测试/实时)、集群节点)
C.
【讨论】:
我也一直在思考同样的问题。这里有一些想法。
方法
1:将包含路径设置为所有项目中的一个共享文件夹。如果您在编写/修改库时注意向后兼容性,它不应该破坏任何东西。但是,是的,这是非常冒险的,因为如果您确实破坏了某些东西,那么您的所有项目都会破坏它。
2:创建一个包含在您的库中的简单更新脚本,将文件从主源复制到您的项目。更新库时运行此脚本。
3:使用版本控制设置。 Git 子模块可能会工作 (http://book.git-scm.com/5_submodules.html)
4:我想尝试 Phar 文件。唯一的缺点是它们不适用于低于 5.3 的 PHP 版本
更新:2011 年 4 月 12 日 - 我建议使用方法 #3。现在我已经使用了一段时间,这显然是最佳实践。
【讨论】: