我正在编写我的第一个 PHP 应用程序。每个人都在谈论bootstrap.php
要初始化您的应用程序。这是有道理的,我已经整理了一个我很满意的。有两件事我不明白,而且似乎没有人提到:
我从哪里调用我的助推器?我是否将其包含在每个页面中?请告诉我有更好的方法...
我如何做到这一点,这样我的引导程序就不会比需要的更频繁地调用?我认为它只需要在应用程序开始或新会话开始时调用。
我正在编写我的第一个 PHP 应用程序。每个人都在谈论bootstrap.php
要初始化您的应用程序。这是有道理的,我已经整理了一个我很满意的。有两件事我不明白,而且似乎没有人提到:
我从哪里调用我的助推器?我是否将其包含在每个页面中?请告诉我有更好的方法...
我如何做到这一点,这样我的引导程序就不会比需要的更频繁地调用?我认为它只需要在应用程序开始或新会话开始时调用。
1:一般bootstrap在“application”目录下。它是从与应用程序处于同一级别(不在其中)的“公共”目录调用的。公共文件夹中的 index.php 应包含 bootstrap.php ,这就是您的 Document_Root 应设置的位置(请注意,您可能需要更改/添加一些包含路径才能使其工作)
2:它只能通过公共文件夹中的 index.php 文件包含一次。如果正确完成,只要包括它就足够了。
希望有帮助。
这取决于您的应用程序架构。
如果您的体系结构是旧的“php 脚本群”——直接从浏览器调用的 PHP 脚本——那么您将在每个脚本的顶部包含它,一种或另一种方式。
如今,大多数开发人员(和框架)以一种或另一种方式通过 /index.php 整理他们的所有请求,通常会进行一些 URL 重写以制作漂亮、漂亮的 URL 供用户查看。
在这个时代,你可能应该做后者,或者至少考虑一下。它可以带来更好的组织,更重要的是,允许您将所有代码保留在 Web 服务器的文档根目录之外,这是一种很好的安全实践,原因有几个超出了此答案的范围。
看看单例模式。您可以将引导类加倍作为资源容器,例如:
$bootstrap = Bootstrap::getInstance();
$dbConn = $bootstrap->getPdoDbh();
您可以include
或require
文件,或使用自动加载器,并确保您有调用实例化所有页面上的对象。在类定义之后,您甚至可以调用getInstance()
文件底部的 。
或者您可以使用基于 URL 的路由并让您的所有请求都通过一个 index.php 文件,就像 Zend Framework 所做的那样。或者更好的是,使用Zend Framework。
这个答案假设您正在使用 PHP >=5 进行 OOP,这确实是要走的路。
这取决于您的引导文件的作用。如果它只是一个设置一些 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 服务器上下文中执行的,viaindex.php
或类似的;该应用程序很可能是一个命令行应用程序(或两者兼有,如 Laravel/Artisan)。通过自动加载程序进行引导使这种区别不再是问题。