一次初始化Application

时间:2010-08-12 00:10:41

标签: php

我有Java背景。所以请耐心等待。

在Java应用程序中,执行一次初始化的一种方法是使用“Initializer Servlet”,其init()方法可以有一次初始化代码。另一个更通用的机制是让Singleton在首次使用时初始化 - 这个机制可以在各种语言/平台上工作。我需要知道的是如何为我的PHP webapp做到这一点。

我应该使用Singleton模式吗?还有其他/更好/ PHP特定的方式吗?基本上我想要一个“注册表” - 它的一个实例 - 我可以用它来创建其他对象的实例(它们本身是不是取决于当前的情况)。

最终目标是 - 在我的PHP Web应用程序提供任何Web请求之前,我需要初始化某些内容 - Java中的“Initializer Servlet”保证我。也许有一个“初始化PHP页面”或类似的东西?

提前致谢

3 个答案:

答案 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');

当然,实际的细节完全取决于你,但这肯定不是一种不常见的方式来做你想要的事情。