我有Java背景。所以请耐心等待。
在Java应用程序中,执行一次初始化的一种方法是使用“Initializer Servlet”,其init()方法可以有一次初始化代码。另一个更通用的机制是让Singleton在首次使用时初始化 - 这个机制可以在各种语言/平台上工作。我需要知道的是如何为我的PHP webapp做到这一点。
我应该使用Singleton模式吗?还有其他/更好/ PHP特定的方式吗?基本上我想要一个“注册表” - 它的一个实例 - 我可以用它来创建其他对象的实例(它们本身是不是取决于当前的情况)。
最终目标是 - 在我的PHP Web应用程序提供任何Web请求之前,我需要初始化某些内容 - Java中的“Initializer Servlet”保证我。也许有一个“初始化PHP页面”或类似的东西?
提前致谢
答案 0 :(得分:0)
源PHP通常意义上不生成可执行程序。它是一种脚本语言。但是,您可以创建一个单例。
答案 1 :(得分:0)
PHP的本质不允许您像servlet一样进行初始化。在PHP中,一切都将在Web请求中。 正如您所提到的,Registry design pattern可以帮助您设置放置对象的位置,但是,它们将在每次请求时重新创建。
答案 2 :(得分:0)
我没有Java背景,但是在构造中启动并返回(或保持为静态)其他单例/工厂的单例是一种常见模式。因为PHP应用程序唯一定义的“入口点”是传递给解析器的文件,所以许多PHP应用程序都需要很长时间才能重定向到“bootstrap”脚本,该脚本准备环境并实例化所需的任何单例和静态对象通过申请。然后将其包含在入口点,以确保整个应用程序可以使用它。
<?php // this file is bootstrap.php
// ...
class MySingleton {
private static $instance;
private function __construct() {
$this->myFactory1 = new MyFactory1();
$this->myFactory2 = new MyFactory2();
$this->myOtherSingleton = MyOtherSingleton::get();
}
public static function get() {
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
public function __clone() {
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
// Before we leave, we'll get an instance!
$myBootstrapUtility = MySingleton::get();
// end of bootstrap.php ?>
然后在应用程序逻辑的其余部分之前确保require_once('bootstrap.php');
。
当然,实际的细节完全取决于你,但这肯定不是一种不常见的方式来做你想要的事情。