在PHP项目中定位外部库的最佳实践是什么(例如,GoogleMapAPI,Recaptcha等)?现在我有/ lib或其子目录中的所有类,并使用Zend约定命名(例如,类Foo位于/lib/Foo.php,类Db_Bar位于/lib/Db/Bar.php)。
但我应该隔离第三方的东西吗?如果是这样,怎么样?哪里?里面/ lib?别处?注意:这些类的自动加载不是问题,因为它们总是在需要时显式包含/需要(与我自己的类不同)。
谢谢!
答案 0 :(得分:4)
你走在正确的轨道上,将所有内容都放在/lib
中。我建议将每个文件分成自己的子文件夹,因为许多库都有多个文件。所以请/lib/googlemaps
,/lib/recaptcha
等等。
如果您仍然不确定,或许可以看一些像CodeIgniter这样的框架。 Joomla使用我上面描述的系统。他们甚至对整个Joomla框架都有/lib/joomla
。
没有必要过度思考它。只要很容易找到并包含库,就不用担心了。
答案 1 :(得分:2)
这通常是我为组织应用程序而遵循的结构:
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的内容来查看大部分代码是在外部库中还是在您的核心中。
顺便说一句,很高兴听到自动加载不是问题,而且您根据需要明确包含/要求文件:)
答案 2 :(得分:0)
无法与Linux最佳做法保持一致,例如/ usr / share每个模块类型的lib层次结构?
答案 3 :(得分:0)
如果您不想将文件存储在服务器上,则可以始终将文件的名称和位置保留在数据库中。然后,您可以使用存储的信息根据需要加载它们。此外,这还可以防止您在需要进行更改时更改许多网页。