ágil tutorial symfony2 instalar español descargar desarrollo con php symfony

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_STRICT cuando __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.