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

Php 我们应该在配置文件中初始化类对象吗?,php,configuration-files,Php,Configuration Files,为一个身份验证类初始化一个对象是否是一个好的做法,该类在配置文件中执行各种操作,如注册用户、登录用户等 配置文件主要用于设置db用户名、密码和站点名称等 如果您认为这不是标准做法,请提供原因。只是想让您知道,除了这个特殊的类之外,大多数代码都是过程性的 // MySQL connection settings $db_host = "localhost"; $db_user = "someuser"; $db_pass = "some pass"; $db

为一个身份验证类初始化一个对象是否是一个好的做法,该类在配置文件中执行各种操作,如注册用户、登录用户等

配置文件主要用于设置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

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

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

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


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

我认为这不是一个好主意。配置文件用于配置,而不是执行。我将把这段代码放在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";

将代码抽象成具有单一用途的块是一种好的做法,在您的示例中,这就是配置对象和身份验证处理程序。这与设计的简单性有关。在这种情况下:代码的简单性。当你混合代码时,就像你描述的那样,你的代码变得更复杂,因为它做的事情更多

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

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

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

在您的示例中,我将使用以下内容:

<?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);
}

+1我认为将引导/配置分开是件好事。配置应该只声明配置变量。