【问题标题】:PHP how to import class with namespacePHP如何使用命名空间导入类
【发布时间】:2016-11-08 05:32:03
【问题描述】:

我以前从未在 PHP 中使用过命名空间,并且我无法导入一些使用它们的库类。我正在尝试使用wsdl2php 库,这是有关如何使用该库的示例代码:

$generator = new \Wsdl2PhpGenerator\Generator();
$generator->generate(
  new \Wsdl2PhpGenerator\Config(array(
    'inputFile' => 'input.wsdl',
    'outputDir' => '/tmp/output'
  ))
);

但是,我将执行此代码的 php 文件放在哪里并不重要,它总是会抛出 class not found 错误,即使我包含 includerequire 的两个类,那么库类将抛出 class not发现错误,因为它想使用另一个库类。

这里有一些目录树供参考:

[src]
    [Filter]
        DefaultFilter.php
        ...
    [Wsdl2PhpGenerator]
        [Console]
            Applicaton.php
            ...
    ...
    Config.php
    Generator.php
    my_php_file_here.php

Config.php 中的命名空间声明:namespace Wsdl2PhpGenerator; use 在 Config.php 中如何使用:use Wsdl2PhpGenerator\ConfigInterface;

据我所知,我在 php 文件的开头添加了以下内容:

namespace Wsdl2PhpGenerator;

use Wsdl2PhpGenerator\Generator;
use Wsdl2PhpGenerator\Config;

没有成功,我还是得到了

Fatal error: Class 'Wsdl2PhpGenerator\Generator' not found in C:\kajacx\programming\PHP\EET\test\wsdl2phpgenerator-master\src\kappa.php on line 8 ($generator = new \Wsdl2PhpGenerator\Generator();)

那么,如何做到这一点呢?

【问题讨论】:

  • 您忘记在命名空间前添加一个起始\ use \Wsdl2PhpGenerator\Generator;\ 表示您的命名空间超出了当前命名空间范围
  • namespace Wsdl2PhpGenerator; 是为你正在使用的上游包保留的,你不应该使用它。在您的代码中,使用您自己的命名空间,例如namespace kajacx。您要么需要使用自动加载器,要么自己需要所需的文件。为了让生活更轻松,请继续查看作曲家:getcomposer.org
  • @Timothy 是的,我尝试在命名空间之前添加 `\`,但仍然出现相同的错误。 @ymas 我首先使用 composer 来获取这些文件

标签: php namespaces include


【解决方案1】:

只需使用:

require_once __DIR__ . '/vendor/autoload.php';

composer 将为您解析导入。 (用相同的库测试,它工作)

【讨论】:

    【解决方案2】:

    因为我刚刚使用 wsdl2php 库(从 gi​​thub 克隆)并且遇到了同样的问题,所以这是我为解决它所做的:

    1) 别忘了先启动composer install ...

    2) 在 php 文件的顶部添加require_once dirname( dirname(__FILE__) ) . '/vendor/autoload.php';

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 2012-01-08
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多