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.
Resumo
Três DTOs gerados em
src/Generated/ConsultaNfeDistribuicaoV1/declaram parâmetro opcional antes de parâmetro obrigatório no construtor, o que emiteDeprecatedjá no parse em PHP 8.0+. Como o SDK declara pisophp ^8.2, a deprecation é atingível em qualquer instalação.Verificado na v3.5.0.
Arquivos e ocorrências
Generated/ConsultaNfeDistribuicaoV1/Sucessonarequisio.php$type$totalInvoiceAmountGenerated/ConsultaNfeDistribuicaoV1/Sucessonarequisio6.php$type$linksGenerated/ConsultaNfeDistribuicaoV1/Sucessonarequisio2.php$environmentSEFAZ$modifiedOnGenerated/ConsultaNfeDistribuicaoV1/Sucessonarequisio2.php$status$modifiedOnSão 3 arquivos e 4 ocorrências. Nenhum outro arquivo de
src/emite deprecation.Em
Sucessonarequisio.php, por exemplo, a ordem do construtor promovido é: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.phpImpacto
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:
php -lem CI, análise estática);vendor/com--classmap-authoritative;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 emConsultaDfeDistribuicaoV2/NFeMetadataResource.php, onde$totalInvoiceAmounté?string ... = null.Contexto
Encontrado ao migrar o plugin nfe/woo-nfe do cliente vendorizado antigo para o
nfe/nfe3.5.