SplQueue
hereda de SplDoublyLinkedList
. Ninguna de estas clases define un constructor propio. Por lo tanto, no hay un constructor padre explícito para llamar, y obtienes ese error. La documentación es un poco engañosa en este caso (como lo es para muchas clases de SPL).
Para resolver el error, no llame al constructor padre.
Ahora, en la mayoría de los lenguajes orientados a objetos, que se puede esperar el constructor por defecto a ser llamado si no hay un constructor explícito declarado en una clase. Pero aquí está el truco: ¡Las clases de PHP no tienen constructores por defecto! Una clase tiene un constructor si y solo si se define.
De hecho, utilizando la reflexión para analizar la clase stdClass
, vemos incluso que carece de un constructor:
$c = new ReflectionClass('stdClass');
var_dump($c->getConstructor()); // NULL
El intento de reflejar los constructores de SplQueue
y SplDoublyLinkedList
tanto el rendimiento NULL
también.
Mi conjetura es que cuando le dices a PHP para crear instancias de una clase, se realiza toda la asignación de memoria interna que necesita para el nuevo objeto, a continuación, busca una definición constructor y lo llama sólo si una definición de __construct()
o <class name>()
es encontrado. Fui a echar un vistazo al código fuente, y parece que PHP se asusta y muere cuando no puede encontrar un constructor para llamar porque se lo dijo explícitamente en una subclase (ver zend_vm_def.h
).
Solo por curiosidad, ¿por qué estás ampliando la clase de cola? ¿Qué necesitas hacer para decorar? – ircmaxell