PHP Bootstrapping基础知识

时间:2010-07-22 22:17:03

标签: php bootstrapping

我正在编写我的第一个PHP应用程序。每个人都在讨论如何bootstrap.php初始化您的应用。这是有道理的,我把一个我很满意的东西放在一起。有两件事我不明白,似乎没有人提到:

  1. 我从哪里打电话给我的boostrap?我是否将其包含在每个页面中?请告诉我有更好的方法......

  2. 我如何制作它以便我的引导程序不会比需要更频繁地调用?我认为只需要在应用程序的开头或新会话的开始时调用它。

5 个答案:

答案 0 :(得分:13)

1:通常,引导程序位于“application”目录中。它从“public”目录调用,该目录与应用程序处于同一级别(不在其中)。公共文件夹中的index.php应该包含bootstrap.php,这是你应该将Document_Root设置为的位置(注意你可能需要更改/添加一些包含它的路径才能工作)

2:只应通过公用文件夹中的index.php文件包含一次。如果正确完成,只要包含它就足够了。

希望有所帮助。

答案 1 :(得分:8)

这取决于您的应用程序架构。

如果您的架构是一个很好的旧“PHP脚本群” - 直接从浏览器调用的PHP脚本 - 那么您将以某种方式将它包含在每个脚本的顶部。

现在,大多数开发人员(和框架)通过/index.php以这种或那种方式对他们的所有请求进行编组,通常会进行一些URL重写,以便为用户提供漂亮,漂亮的URL。

在这个时代,你可能应该做后者,或者至少考虑一下。它可以带来更好的组织,更重要的是,它允许您将所有代码保留在Web服务器的文档根目录之外,这是一个很好的安全实践,出于多种原因,超出了本答案的范围。

答案 2 :(得分:5)

查看singleton pattern。您可以将引导类加倍作为资源容器,例如:

$bootstrap = Bootstrap::getInstance();
$dbConn = $bootstrap->getPdoDbh();

您可以includerequire该文件,或使用自动加载器并确保您有一个调用来实例化所有页面上的对象。在类定义之后,您甚至可能会在文件底部调用getInstance()

或者您可以使用基于URL的路由,并让您的所有请求都通过单个index.php文件,就像Zend Framework一样。或者更好的是,使用Zend Framework

这个答案假设你正在做OOP w / PHP> = 5,这真的是要走的路。

答案 3 :(得分:1)

这取决于你的bootstrap文件的功能。如果它只是一个设置一些ini设置的文件,例如创建一个理智的执行环境并建立数据库连接,那么只需在脚本中包含require_once即可。如果它更像是单点输入,那么您可以配置服务器来过滤对它的所有请求,并将其分派到适当的控制器脚本。

答案 4 :(得分:1)

引导PHP应用程序的一种更优雅的方法是使用Composer。

如今,几乎每个PHP库都使用Composer,并且需要一个类似Bootstrap.php的文件就很简单:

"autoload": {
    "psr-4": {
        "Acme\\Rocket\\": "src/"
    },
    "files": ["src/Bootstrap.php"]
},

请注意第二个属性files。 (第一个psr-4是标准的PSR-4样板自动加载功能,仅包含在其中,以使示例更加真实。)

以这种方式包含引导文件不会天真地假定PHP应用程序是通过index.php或类似方式在Web服务器上下文中执行的;该应用程序很可能是命令行应用程序(或两者,例如Laravel / Artisan)。通过自动加载程序进行引导使这种区别成为不可能。