Skip to content

DTOs gerados de ConsultaNfeDistribuicaoV1 emitem Deprecated em PHP 8.2 (parâmetro opcional antes de obrigatório) #36

Description

@andrenfe

Resumo

Três DTOs gerados em src/Generated/ConsultaNfeDistribuicaoV1/ declaram parâmetro opcional antes de parâmetro obrigatório no construtor, o que emite Deprecated já no parse em PHP 8.0+. Como o SDK declara piso php ^8.2, a deprecation é atingível em qualquer instalação.

Verificado na v3.5.0.

Arquivos e ocorrências

Arquivo Parâmetro opcional Obrigatório que vem depois
Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio.php $type $totalInvoiceAmount
Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio6.php $type $links
Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio2.php $environmentSEFAZ $modifiedOn
Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio2.php $status $modifiedOn

São 3 arquivos e 4 ocorrências. Nenhum outro arquivo de src/ emite deprecation.

Em Sucessonarequisio.php, por exemplo, a ordem do construtor promovido é:

public ?string $type = null,          // 15º
public string $nsu,                   // 16º — obrigatório
public string $totalInvoiceAmount,    // 22º — obrigatório

O default de $type é inalcançável: nenhum chamador consegue omiti-lo sem omitir os obrigatórios que vêm depois.

Como reproduzir

docker run --rm -v "$PWD/vendor/nfe/nfe":/sdk php:8.2-cli \
  php -l /sdk/src/Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio.php
Deprecated: Optional parameter $type declared before required parameter
$totalInvoiceAmount is implicitly treated as a required parameter in
/sdk/.../Sucessonarequisio.php on line 13

Impacto

Baixo na prática, porque são DTOs de consulta de NF-e que um integrador de NFS-e nunca carrega — o autoloader só os traz se a classe for referenciada. Mas aparece em:

  • ferramentas que fazem lint/parse de toda a árvore (php -l em CI, análise estática);
  • projetos que empacotam o vendor/ com --classmap-authoritative;
  • qualquer consumidor que realmente use ConsultaNfeDistribuicaoV1.

E a construção deixa de ser válida quando a depreciação virar erro.

Sugestão

Ajustar o gerador para ordenar os parâmetros promovidos com os obrigatórios primeiro, ou dar default a todos (= null) nos DTOs de resposta — que é o padrão já adotado em ConsultaDfeDistribuicaoV2/NFeMetadataResource.php, onde $totalInvoiceAmount é ?string ... = null.

Contexto

Encontrado ao migrar o plugin nfe/woo-nfe do cliente vendorizado antigo para o nfe/nfe 3.5.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions