Deprecation errors are inconsistently triggered for underscore class aliases
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.1k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 96
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando la reproducción proporcionada de PHP 8.4 y compara el comportamiento de deprecation para las declaraciones de clase, las llamadas a class_alias() y el alias namespaced use. Rastrea las rutas del intérprete que gestionan los alias de clase y las importaciones de namespaces, y añade cobertura de regresión que demuestre que los cuatro casos esperados con guiones bajos emiten deprecations.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- php
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100