我正在编写我的第一个PHP应用程序。每个人都在谈论有一个bootstrap.php
来初始化你的应用程序。这是有道理的,我把一个我很满意的东西放在一起。有两件事我不明白,似乎没有人提到:
1:通常,引导程序位于“application”目录中。它从“public”目录调用,该目录与应用程序处于同一级别(不在其中)。公共文件夹中的index.php应该包含bootstrap.php,这是您应该将Document_Root设置为的位置(请注意,您可能需要更改/添加一些包含路径才能工作)
2:只应通过公用文件夹中的index.php文件包含一次。如果正确完成,只要包含它就足够了。
希望有所帮助。
这取决于您的应用程序架构。
如果您的架构是一个很好的旧“PHP脚本群” - 直接从浏览器调用的PHP脚本 - 那么您将以某种方式将它包含在每个脚本的顶部。
现在,大多数开发人员(和框架)通过/index.php以这种或那种方式对所有请求进行编组,通常会进行一些URL重写,以便为用户提供漂亮,漂亮的URL。
在这个时代,你可能应该做后者,或者至少考虑一下。它可以带来更好的组织,更重要的是,它允许您将所有代码保留在Web服务器的文档根目录之外,这是一个很好的安全实践,出于多种原因,这些原因超出了本答案的范围。
看看singleton pattern。您可以将引导类加倍作为资源容器,例如:
$bootstrap = Bootstrap::getInstance();
$dbConn = $bootstrap->getPdoDbh();
你可以include
或require
文件,或使用自动加载器,并确保你有一个调用来实例化你的所有页面上的对象。在类定义之后,您甚至可能会在文件底部调用getInstance()
。
或者您可以使用基于URL的路由,并让您的所有请求都通过单个index.php文件,就像Zend Framework一样。或者更好的是,使用Zend Framework。
这个答案假设您正在使用PHP> = 5进行OOP,这真的是要走的路。
这取决于你的bootstrap文件做什么。如果它只是一个设置一些ini设置的文件,例如创建一个理智的执行环境并建立数据库连接,那么只需在脚本中包含require_once即可。如果它更像是单点输入,那么您可以配置服务器以过滤对它的所有请求,并将其分派到适当的控制器脚本。
引导PHP应用程序的一种更优雅的方法是使用Composer来实现。
现在几乎每个PHP库都使用Composer,并且需要类似Bootstrap.php
的文件就像下面这样简单:
"autoload": {
"psr-4": {
"Acme\\Rocket\\": "src/"
},
"files": ["src/Bootstrap.php"]
},
请注意第二个属性files
。 (第一个,psr-4
,是标准的PSR-4样板自动加载,仅用于使示例更真实。)
以这种方式包含引导程序文件并不能简单地假设PHP应用程序是在web服务器上下文中通过index.php
或类似方式执行的;应用程序很可能是一个命令行应用程序(或两者,如Laravel / Artisan)。通过自动加载器进行引导使得这种区分不成问题。