Composer autoload被调用但什么都没有加载

时间:2016-12-09 16:16:06

标签: php composer-php autoload

项目结构

/Test
    composer.json
    composer.lock
    index.php
    nfe.xml
    vendor/
        autoload.php
        (more files)

PHP代码

我正在尝试在github上的图书馆README中找到的剪辑

<?php

require_once 'vendor/autoload.php';

// var_dump( get_declared_classes() );
echo 'a';
$nfeProc = NFePHPSerialize::xmlToObject(file_get_contents('nfe.xml'));
echo 'b';

//Capturando CNPJ do emitente
$cnpjEmitente = $nfeProc->getNFe()->getInfNFe()->getEmit()->getCNPJ();

echo $cnpjEmitente;

结果

但是我收到以下错误:

PHP Fatal error:  Class 'NFePHPSerialize' not found in /var/www/html/Test/index.php on line 7
PHP Stack trace:
PHP   1. {main}() /var/www/html/Test/index.php:0

最后,我已取消评论var_dump( get_declared_classes() );只是为了知道库nfephp-serialize中的某些内容(用于税务目的)是否已加载,但我一无所获。

初始化

要初始化Test目录,我发出了以下命令:

$ composer require jansenfelipe/nfephp-serialize

1 个答案:

答案 0 :(得分:1)

如何解决?

缺少的是与NFePHPSerialize类关联的路径。它是JansenFelipe\NFePHPSerialize

您可能希望useNFePHPSerialize及其命名空间,如下所示:

<?php

require 'vendor/autoload.php';

use JansenFelipe\NFePHPSerialize\NFePHPSerialize;

或简单地写:

$nfeProc = JansenFelipe\NFePHPSerialize\NFePHPSerialize::xmlToObject(file_get_contents('nfe.xml'));

我是如何找到命名空间的?

您可能希望在NFePHPSerialize目录中搜索/vendor类...并找到namespace语句,即:

namespace JansenFelipe\NFePHPSerialize;

因此,该课程可以namespace\class使用:

$var = new JansenFelipe\NFePHPSerialize\NFePHPSerialize(...);

但是您可以通过插入use语句来改进这一点:

<?php

use JansenFelipe\NFePHPSerialize\NFePHPSerialize;

// some code...

$var = new NFePHPSerialize(...);

我希望这会对你有所帮助! :)