我是PHP的新手,想了解关于PHP项目的目录结构。我有Java编程经验,在Java中,src包含Java源代码文件,WEB-INF包含lib和jsp页面。我们在PHP中是否有类似的标准目录结构呢?此外,在PHP中是否存在层次结构,如同Java中的层次结构(例如Web、Service、DAO层)?
我已经浏览了一些链接,但每个链接都给出了不同的答案。
我不确定是否可以将这两种语言进行比较。我只想遵循一些标准。
提前感谢。
我是PHP的新手,想了解关于PHP项目的目录结构。我有Java编程经验,在Java中,src包含Java源代码文件,WEB-INF包含lib和jsp页面。我们在PHP中是否有类似的标准目录结构呢?此外,在PHP中是否存在层次结构,如同Java中的层次结构(例如Web、Service、DAO层)?
我已经浏览了一些链接,但每个链接都给出了不同的答案。
我不确定是否可以将这两种语言进行比较。我只想遵循一些标准。
提前感谢。
不是的。PHP可以随心所欲地使用。它可以是非常简单的平面文件,也可以是你想要的任何形式。
话虽如此,有一些约定俗成的编码标准,但是没有对这些标准进行“强制执行”。它们被称为PSR(PHP标准推荐)。这里有更多相关信息:http://net.tutsplus.com/tutorials/php/psr-huh/
您可以在这里逐个查看标准:http://www.php-fig.org/psr/
大多数主流框架都遵循这些标准,如果您要使用其中一个框架,可能会更容易上手。
同样,每个框架、项目、插件、程序等都有不同的布局和不同的项目结构。 一种常见的结构是像这样的:
-framework_dir
-public_html
-js
-img
-css
-index.php
-protected/private
-controllers
-models
-views
-etc
然后他们使用.htaccess
文件来阻止对受保护目录的访问。这只是我在几个框架中看到的常见表示法。如果您正在进行个人项目,请使用您熟悉的内容。每个框架都会提供不同的库或方式来访问数据,没有"层",但每个框架都有处理不同领域(电子邮件、数据库、缓存、HTTP、日志等)的对象。由于有几十种流行的框架,所以找到与您的理念或项目相匹配的就取决于您。观看几个5分钟的博客视频,了解一下它是否适合您,然后试运行几天。如果您不喜欢它,请切换到另一个。
有了Composer的发明,人们现在有了一个中心地带来注册自己的项目供全世界使用,其他人也能够查看那个代码库并发现相似之处。
结果就是这个:https://github.com/php-pds/skeleton
简而言之:
如果一个软件包有根目录下的文件夹 | 则它必须被命名为 |
---|---|
命令行可执行文件 | bin/ |
配置文件 | config/ |
文档文件 | docs/ |
Web服务相关的文件 | public/ |
其它资源文件 | resources/ |
PHP源码文件 | src/ |
测试代码 | tests/ |
这个规范并没有对src
或public
下需要存在哪些目录进行更深入的建议。
将你的PHP源文件组织到这些目录中的具体方式仍然由你决定,但是这篇文章中提到的建议我也同意:要么按类型分类(控制器、实体、服务),要么按功能分类(用户、登录、购物车、目录、文章、评论) - 后者将属于一个功能的所有代码放在一个目录中(或几个子目录中),这通常似乎是更好的文件组织方式。
按类型组织时,你会经常在不同目录之间切换,而且你无法很好地了解代码的内容 - 你总是有“Controller”,但你很少有“StampCollection”。
- build/
-- phpdox.xml
-- phpmd.xml
-- phpunit.dist.xml
- config/
- public/
-- .htaccess
-- index.php
-- assets/
- src/
-- Customer/
--- CustomerController.php
--- CustomerRepository.php
--- Customer.php
--- customer.routes.php
- tests/
- vendor/
composer.json
.gitignore
很不幸(还是幸运?)你在使用PHP时非常自由,这取决于你。
以下是我的结构:
framework/
controllers/
models/
configs/
files/
templates/
themes/
tmp/
index.php
init.php
.htaccess
您可以通过 .htaccess 控制访问权限。
index.php
,这意味着整个目录树都暴露给外部(可能受到同级 .htaccess
内容的影响)。我会尽量避免这种情况,因为如果没有服务器配置的帮助,隐藏不想暴露的内容会更加困难(但并非不可能)。 - SvenPROJECT ROOT
|--composer.json
|--README.md
|--docs //for documentation files
|--tests //for Unit Tests
|--vendor //for external libraries (if everything isn't included through composer)
|--examples //examples of the library being used
|--config //any configuration files you may have
|--src //where the library's actual code "lives"
|--php //php source code, classes, any other scripts
|--View //html views, but actually php files that output html
|--Style //contains .css files
|--Script //contains .js files
|--Res //contains other deliverable resource files. Could be mp3 files, json etc
composer.json
、README.md
和src
。但是当我到达那个点时,我可能会像我描述的那样使用其他文件。.htaccess
文件,你可以将一个.css
文件路由到/src/Style/requested_file.css
。