Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';PHP项目中外部库的最佳位置是哪里?_Php - Fatal编程技术网

什么';PHP项目中外部库的最佳位置是哪里?

什么';PHP项目中外部库的最佳位置是哪里?,php,Php,在PHP项目中查找外部库的最佳实践是什么(例如,GoogleMapAPI、Recaptcha等)?现在我在/lib或其子目录中拥有所有类,并且使用Zend约定进行命名(例如,类Foo位于/lib/Foo.php中,类Db_Bar位于/lib/Db/Bar.php中) 但是我应该隔离第三方的东西吗?如果是,怎么做?哪里内/库?在别处注意:自动加载这些类不是问题,因为它们总是在需要的地方被显式地包括/需要(与我自己的类不同) 谢谢 无法与Linux最佳实践保持一致,例如/usr/share与每个模块

在PHP项目中查找外部库的最佳实践是什么(例如,GoogleMapAPI、Recaptcha等)?现在我在/lib或其子目录中拥有所有类,并且使用Zend约定进行命名(例如,类Foo位于/lib/Foo.php中,类Db_Bar位于/lib/Db/Bar.php中)

但是我应该隔离第三方的东西吗?如果是,怎么做?哪里内/库?在别处注意:自动加载这些类不是问题,因为它们总是在需要的地方被显式地包括/需要(与我自己的类不同)


谢谢

无法与Linux最佳实践保持一致,例如/usr/share与每个模块类型的lib层次结构保持一致?

您的思路正确,将所有内容都放在
/lib
中。我建议将每个库分离到它自己的子文件夹中,因为许多库都有多个文件。还有
/lib/googlemaps
/lib/recaptcha
等等

如果您仍然不确定,也许可以看看一些框架,比如CodeIgniter。Joomla使用我上面描述的系统。他们甚至为整个joomla框架提供了
/lib/joomla


没必要想太多。只要很容易找到并包含库,就不用担心。

如果不想将文件存储在服务器上,您可以将文件的名称和位置保存在数据库中。然后,您可以使用存储的信息根据需要加载它们。此外,这还可以防止您在需要进行更改时不得不更改许多网页。

这通常是我组织应用程序所遵循的结构:

myproject/
myproject/app
myproject/app/controllers
myproject/app/views
myproject/app/models
myproject/config
myproject/log
myproject/lib
myproject/lib/external
myproject/lib/external/Zend -> symlinked to -> /whatever/libraries/zend-1.x.x/
myproject/lib/external/GoogleMaps/ -> symlinked to -> /whatever/libraries/gmaps-1.x/
myproject/lib/core (to my application)
myproject/lib/core/Adapters/Rest.inc
myproject/lib/core/Facades/SimpleTwitterApi.inc
....etc....
使用lib/external很有帮助,因为我通常会将不同版本的库(Zend等)进行符号链接,更新它们会变得更容易管理。另外,如果您使用版本控制系统,那么很有意思的一点是查看lib/core和lib/external中有多少提交。此外,您可以使用phploc之类的工具来查看大部分代码是在外部库中还是在核心中


顺便说一句,很高兴听到自动加载不是问题,您可以根据需要明确包括/需要文件:)

。。。或者有一个“聪明”的自动加载程序,即自动加载类的配置文件。@DisgludedCoat谢谢!这与我所做的非常接近。我通常会包含我正在使用的库的特定版本,而不是链接到它们以避免版本不匹配,但当然还有其他方法来处理。