php / php/php-src

Deprecation errors are inconsistently triggered for underscore class aliases

Aperta
#18,285 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.1k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

Description

The following code:

<?php

namespace Foo {
    class __ {}
}

namespace Bar {
    class _ {} // Deprecated
}

namespace {
    class __ {}
    
    class_alias('Foo\__', 'Foo\_'); // Is this meant to be deprecated?
    class_alias('__', '_'); // Deprecated
}

namespace Baz {
    use Foo\_;
}

namespace Qux {
    use Foo\__ as _; // Is this meant to be deprecated?
}

Resulted in this output:

Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/ZZMJs on line 8

Deprecated: Using "_" as a class alias is deprecated since 8.4 in /in/ZZMJs on line 15

But I expected this output instead:

Deprecated: Using "_" as a class name is deprecated since 8.4 in /in/ZZMJs on line 8

Deprecated: Using "_" as a class alias is deprecated since 8.4 in /in/ZZMJs on line 14

Deprecated: Using "_" as a class alias is deprecated since 8.4 in /in/ZZMJs on line 15

Deprecated: Using "_" as a class alias is deprecated since 8.4 in /in/ZZMJs on line 23

I encountered this issue while trying to migrate a large closed source project to PHP 8.4. The namespaced _ class was used as a wrapper for the gettext _ function (eg new _("string")), to delay performing the translation of cached content until the http response is stringified. The class had ~35k instantiations in source control and more instances in compressed + serialized database records. This made class aliases a potentially appealing solution, but I understand from @Girgias that these not emitting deprecation errors is an oversight.

PHP Version

8.4.1 - 8.4.6 on 3v4l

Operating System

No response

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo la riproduzione fornita con PHP 8.4 e confronta il comportamento di deprecation per le dichiarazioni di classe, le chiamate a class_alias() e l’alias namespaced use. Traccia i percorsi dell’interprete che gestiscono gli alias delle classi e gli import dei namespace, quindi aggiungi una copertura di regressione che dimostri che tutti e quattro i casi attesi con underscore emettono deprecations.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
php
Ambito
backend
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.