【问题标题】:PHP does a subsequently required file have access to previous requirements?PHP 后续需要的文件是否可以访问以前的要求?
【发布时间】:2017-07-20 15:57:56
【问题描述】:

如果我 require 一个文件,比如 Composer 自动加载脚本,我随后 require 的文件可以访问该文件的“内容”吗? 我以前从来没有遇到过这个问题,但我似乎碰到了一堵砖墙。

加载脚本:

//load required class files
require "../server/frameworks/vendor/autoload.php";
//alias
use Mailgun\Mailgun;
//get config
require "../server/sitetools/config.php";

config.php

class sitetools{
    function __construct(){
        //Instantiate Mailgun
        $this->mg = new Mailgun("API_KEY");
        $this->domain = "domail.tld";
    }
}

然后,当我尝试实例化它时,我的 sitetools 类出现错误:Class 'Mailgun\Mailgun' not found

【问题讨论】:

  • 你需要将命名空间添加到config.php,而不是加载脚本(如果你不在那里使用它......)。
  • 但它肯定应该“转移”吗?
  • 不,这可能会导致冲突。例如,如果多个包有一个名为 Log 的类,并且您将在加载脚本文件中包含所有命名空间。
  • 顺便说一句,你也可以让你自己的类使用 composer 自动加载器,那么你也不必包含这些。不过,您需要使用它的命名约定。
  • 啊,我明白了,这很有道理!我也会调查一下。您介意提交答案吗?

标签: php class require mailgun


【解决方案1】:

您需要将命名空间添加到 config.php,而不是加载脚本(如果您不在那里使用它...)。

config.php

use Mailgun\Mailgun;

class sitetools {
    function __construct(){
        //Instantiate Mailgun
        $this->mg = new Mailgun("API_KEY");
        $this->domain = "domail.tld";
    }
}

通过为你的脚本和你的类使用相同的文件名,你应该能够为你自己的类使用 composer 自动加载器(它可能需要更多的配置......)。

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2011-06-05
    • 2016-01-30
    相关资源
    最近更新 更多