首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP没有在类上调用构造函数吗?

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

Stack Overflow用户
提问于 2018-05-31 08:45:45
回答 2查看 62关注 0票数 0

我有一个大约一年前参与的项目。我在其中编写了各种代码,当时我刚刚开始学习依赖注入。

长话短说,我忘记了如何将参数传递给构造函数。我试过了,尽管它似乎什么也做不了。我试着查看Dice的现有代码,但我不能解决它。

代码语言:javascript
复制
<?php declare(strict_types = 1);

$dice = new \Dice\Dice;

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

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

所讨论的类

代码语言:javascript
复制
<?php declare(strict_types = 1);

namespace App\Providers;

class Configuration {
    private $config;

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

正如您所看到的,在构造函数中,我具有以下内容:

代码语言:javascript
复制
exit($configDirectory);

我没有得到任何东西,它只是继续代码并打印Twig模板,即使没有通过,它至少应该打印一个空字符串吗?

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

代码语言:javascript
复制
"autoload": {
    "psr-4": {
        "App\\": "src"
    }
}

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

$config = new \App\Providers\Config("test");

EN

回答 2

Stack Overflow用户

发布于 2018-08-18 21:01:55

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

这不起作用的原因是Dice从不过早地创建对象。在您向容器请求实例之前,不会创建Configuration对象:

代码语言:javascript
复制
$configuration = $dice->create("App\Providers\Configuration");
票数 2
EN

Stack Overflow用户

发布于 2018-05-31 08:59:17

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50615164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档