PHP没有在类上调用构造函数?

时间:2018-05-31 00:45:45

标签: php

我有一个项目,我在一年前工作。我已经编写了各种各样的东西,而且正是在我开始学习依赖注入的过程中。

长话短说,我忘记了如何将参数传递给构造函数。我试过了,虽然它似乎没有做任何事情。我已经尝试查看Dice的现有代码,但我无法解决。

var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only

var extension = Path.GetExtension(fileFullName); // Get the extension only

有问题的课程

<?php declare(strict_types = 1);

$dice = new \Dice\Dice;

$configRule = [
    "constructParams" => ["config_directory_here"],
];

$dice->addRule("App\Providers\Configuration", $configRule);

如您所见,在构造函数中我有:

<?php declare(strict_types = 1);

namespace App\Providers;

class Configuration {
    private $config;

    public function __construct($configDirectory) {
        exit($configDirectory);
        $this->config = array();
        $this->loadConfig($configDirectory);
    }
}

我没有得到任何回报,它只是继续使用代码并打印Twig模板,不管它至少只是打印一个空字符串,即使它没有通过?< / p>

我不确定这是我的骰子代码还是我的PHP本身的问题。我有PS4自动加载,因此应该包含Configuration类。

exit($configDirectory);

有人可以帮我吗?谢谢!添加以下代码时,它按预期工作,但我需要使用依赖注入容器来加载类。

"autoload": { "psr-4": { "App\\": "src" } }

2 个答案:

答案 0 :(得分:1)

构造函数假设创建一个对象,除了它试图创建的对象之外,不能返回任何内容。 除了将构造函数参数分配给对象属性之外,您永远不应该创建执行任何工作的构造函数。

答案 1 :(得分:1)

完全公开:我是Dice的作者。

之所以不起作用,是因为Dice从未过早创建对象。在您向容器请求实例之前,不会创建Configuration对象:

$configuration = $dice->create("App\Providers\Configuration");