tutorial - PHP: "La declaración de... debería ser compatible con la de..."
symfony php descargar (2)
Anulación de constructores es un caso especial :
A diferencia de otros métodos, PHP no generará un mensaje de error de nivel
E_STRICTcuando__construct()se__construct()con parámetros diferentes a los que tiene el método padre__construct().
No puedes hacer eso con otros métodos.
Me gustaría crear una interfaz para entidades que son CRUDables (se pueden guardar y eliminar). Aquí está mi clase abstracta:
abstract class AbstractCrudableEntity extends AbstractEntity
{
abstract public function doSave();
abstract public function doDelete();
}
Mi clase de implementación necesita un par de parámetros adicionales para esos métodos. Aquí está la firma de la clase de implementación:
class Contact extends AbstractCrudableEntity {
public function doSave(User $user, /UberClientManager $manager);
public function doDelete(User $user, /UberClientManager $manager);
}
Entiendo que PHP requiere que las clases implementadas tengan los mismos parámetros para los métodos que la clase padre (hay varias preguntas que responden a esta pregunta: esto , por ejemplo). Así que, ese no es el problema.
Sin embargo, recientemente me encontré con un código en Symfony que trata con tokens de autenticación. La clase UsernamePasswordToken extiende AbstractToken , y tiene un conjunto diferente de parámetros en el método __construct() : AbstractToken::__construct() versus UsernamePasswordToken::__construct() .
Mi pregunta es ¿cómo puede Symfony hacer esto? ¿Cuál es la diferencia entre esto y mi código?
Los métodos secundarios deben tener la misma cantidad de parámetros que los métodos abstractos en una clase principal abstracta.
El constructor en tu ejemplo no es abstracto: el hijo simplemente lo está anulando.