如何在 php 脚本中导入 config.php 文件

How to import a config.php file in a php script

我尝试将 config.php 读入 php class 但做不到。

我只想在真正需要的时候加载配置,而不是在程序开始时导入它

我在网上搜索了很多,但没有找到任何解释。

我将向您展示我的 class,我在其中阅读了配置:

<?php declare(strict_types=1);

namespace Mailer\Mailer;

class Mailer
{
    private $mailConfigs;

public function __construct()
{
    $this->mailConfigs = require __DIR__ . '/../../Config/MailConfiguration.php';
}

/**
 * @return mixed
 */
public function getMailConfig()
{
    return $this->mailConfigs;
}
}

我的索引文件如下所示:

<?php
use Maier/Mailer;

$mailer = new Mailer();
$mailer->getMailConfig();

var_dump($mailConfiguration);

不幸的是,这段代码只给我找不到配置的错误。

然后我以为config dn只能在Mailer.php class中使用,但即便如此,我也只得到他找不到config的错误信息:

<?php declare(strict_types=1);

namespace Mailer\Mailer;

class Mailer
{
    private $mailConfigs;

public function __construct()
{
    $this->mailConfigs = require __DIR__ . '/../../Config/MailConfiguration.php';
}

/**
 * @return mixed
 */
public function getMailConfig()
{
    $this->mailConfigs;
    var_dump($mailConfig);
}
}

顺便说一句。我的配置如下所示:

<?php

$mailConfig = [
    'mailSender' => 'wk@someSender.com',
    'mailSubject' => 'XXX',
    'maxConnections' => 400,
    'maxTime' => 600,
    'csv' => 'mailaccounts.csv',
];

谁能帮我解释一下如何在不全局读取的情况下正确访问 oop 配置中的数组?

非常感谢。

代码的问题是您实际上并没有在 MailConfiguration.php 中返回配置。您将其定义为一个变量,您永远不会在构造函数中使用它。

不要将配置数组存储在配置文件的变量中,而是:

return [
    'mailSender' => 'wk@someSender.com',
    'mailSubject' => 'XXX',
    'maxConnections' => 400,
    'maxTime' => 600,
    'csv' => 'mailaccounts.csv',
];

现在配置数组将被加载到构造函数中的 $this->mailConfigs

然后,当你想使用它的时候,只要这样做:

public function getMailConfig()
{
    return $this->mailConfigs;
}

因为它包含与您在配置文件中返回的数组相同的数组。

建议

构建配置很好,这样您就可以为不同的环境(生产、暂存、本地、测试等)加载不同的配置文件。所以建议您将配置文件的路径传递给构造函数。然后你可以为不同的环境传递不同的文件。示例:

public function __construct($configFile)
{
    $this->mailConfigs = require $configFile;
}

并且当您实例化 class 时:

$mailer = new Mailer(__DIR__ . '/../../Config/MailConfiguration.php');

然后你可以让你传入的文件以当前环境为条件。

另一种方法是以不同的格式保存配置,即序列化它并在需要时反序列化它。要使用的一种格式是 JSON 格式。

示例

index.php

<?php
    include 'loader.php';

    $loader = new loader();
?>

Loader.php

<?php
    class loader{
        private $config;

        function __construct(){
            $this->config = file_get_contents('config.php');
            $this->config = json_decode($this->config,true);

            echo $this->config['a']; //Test Config
            echo $this->config['b']; //Test B
        }
    }
?>

Config.php (JSON)

{
    "a":"Test Config",
    "b":"Test B"
}

输出: 测试配置测试 B