Property hooks do not call parent's magic `__get` and `__set` methods when referencing parent property
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
I was playing around with property hooks and noticed the following (in my opinion) inconsistency when combining property hooks with inheritance and __get and __set:
The following code (for __get, the same applies for __set in https://3v4l.org/Q2OAj):
<?php
class ParentClass {
public function __get(string $name) {
echo "__get($name) was called\n";
}
}
class ChildClass extends ParentClass {
public $foo {
get => parent::$foo::get();
}
}
(new ParentClass)->foo;
(new ChildClass)->foo;
Resulted in this output:
__get(foo) was called
Fatal error: Uncaught Error: Undefined property ParentClass::$foo in /in/Y27mB:13
But I expected this output instead:
__get(foo) was called
__get(foo) was called
I tried searching the RFC and existing PHP issues, but I haven't found this example - apologies if I missed it. Barring something saying that this shouldn't work, I would expect it to.
PHP Version
PHP 8.4.3
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 con el reproductor proporcionado de PHP 8.4.3 y compara las rutas de property-hook para parent::$foo::get y parent::$foo::set con el acceso mágico directo. El payload no indica archivos ni pruebas de php-src, así que rastrea el manejo relevante de property-hook y la herencia, y verifica después que ambos ejemplos invoquen los métodos mágicos del padre sin un error de propiedad no definida.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- php
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100