我们应该在配置文件中初始化一个类对象吗?

时间:2011-06-09 10:21:59

标签: php configuration-files

为配置文件中的注册用户,登录用户等各种事情初始化身份验证类的对象是一个好习惯吗?

配置文件主要用于设置db用户名,密码和站点名称等。

如果您没有找到标准做法,请提供理由。只是为了让你知道大部分代码都是程序性的,除了这个特殊的类。

    // MySQL connection settings
    $db_host = "localhost";
    $db_user = "someuser";
    $db_pass = "some pass";
    $db_name = "somedb";



    // Name of the site
    $site_name = "MyDomainName";   



    $auth = new auth();//initialize Authentication class
$auth->set_auth();//Check if user autorized

4 个答案:

答案 0 :(得分:3)

在我看来,这不是一个好主意。 配置文件用于配置,而不是用于执行。我将此代码放入bootstrap.php中,因此,当您将来编辑代码时,您确切知道可以在哪里找到您的配置和实例。

的index.php:

include('bootstrap.php');

bootstrap.php中:

include('config.php');
$auth = new auth();
$auth->set_auth();

的config.php:

$db_host = "localhost";
$db_user = "someuser";
$db_pass = "some pass";
$db_name = "somedb";

答案 1 :(得分:2)

认证类应负责认证,而不是处理用户特定的功能,如注册/编辑/删除。配置对象应该对需要配置数据的对象可用,而不是相反。

配置文件不应包含除配置数据之外的任何内容。

答案 2 :(得分:2)

我不会这样做。出于多种原因,“代码”最好与“配置文件”完全分开。一个是您可能在配置文件中有敏感信息(例如密码),并希望将它们保存在与代码本身不同的存储库中。将初始化(即代码)放入Config将意味着它在两个源存储库中进行控制。其次,“运行”的东西可能不是幂等的。 new auth()可能会设置一些状态,这将使Config“重新加载”有点痛苦。

最好保留一个“Config loader”,它在从配置文件中读取信息后创建一个包含实例化类等的Config对象,而不是将该init代码直接放入文件中。此外,我不建议使用可执行代码作为配置文件(虽然这似乎是PHP世界中的实践)。我会使用像.iniyaml之类的格式加载它,而不是冒险评估核心应用程序之外的代码。

答案 3 :(得分:2)

最好将代码抽象为具有单一用途的块,在您的情况下:配置对象和身份验证处理程序。这与the KISS Principle有关,它通过设计来规定简单性。在这种情况下:代码简单。当您正在混合代码时,就像您正在描述的那样,代码变得更加复杂,因为它会做更多的事情。

虽然起初可能看起来并不复杂,但这种设计最终会导致复杂的代码。例如:如果另一位开发人员加入您的团队该怎么办?您需要添加另一个配置,以及选择正确配置的条件。在处理不同环境(开发/生产)时也是如此。 如果在某些情况下你不想使用身份验证处理程序呢?也许您正在执行不需要身份验证的操作,或者更好的是:当身份验证不需要时。更多代码,更复杂。

通过创建代码块,无论是类,函数还是包含,您都使用loose coupling。这意味着块彼此不了解,但它们可以相互作用。此交互通常通过为身份验证处理程序提供可以使用的配置对象来完成,而不是让处理程序决定它使用的配置。这称为dependency injection,被认为是解耦代码的一种非常好的方法。

其次,质量代码主要是documents itself。假设我必须在您的代码中工作,我不知道包含配置文件实际上是在进行身份验证。我可以花上几分钟,也许几个小时试图找出创建会话的原因,在查看代码时,似乎没有任何迹象表明这一点。

在你的例子中,我会使用这样的东西:

<?php

include 'config.php'; // contains function that returns config object/array
include 'auth.php';   // contains functions for authentication

// determine environment, based on server variables (ip, script path, etc)
$environment = getEnvironment($_SERVER);

// get config based on environment
$config = getConfig($environment);

// see if authentication is needed
if (needsAuthentication()) {

    // perform authentication based on request variables (eg: submitted form fields)
    $auth = new auth();
    $auth->doAuth($config, $_REQUEST);
}