significa que poo new heredar atributos php oop visibility

que - __destruct visibilidad para PHP



protected php class (2)

Creo que debería ser público en el caso en que una subclase necesite llamar explícitamente al método __destruct de la clase principal.

Algo así arrojaría un error:

<?php class MyParent { private function __destruct() { echo ''Parent::__destruct''; } } class MyChild extends MyParent { function __destruct() { echo ''Child::__destruct''; parent::__destruct(); } } $myChild = new MyChild(); ?>

¿Debería la "visibilidad" para la función __destruct() ser pública o alguna otra cosa? Intento escribir un documento de normas para mi grupo y surgió esta pregunta.


Además de la respuesta de Mark Biek:

La función __destruct () debe declararse pública. De lo contrario, la función no se ejecutará al apagar el script:

Warning: Call to protected MyChild1::__destruct() from context '''' during shutdown ignored in Unknown on line 0 Warning: Call to private MyChild2::__destruct() from context '''' during shutdown ignored in Unknown on line 0

Esto puede no ser dañino, sino sucia.

Pero lo más importante de esto: si el destructor se declara privado o protegido, el tiempo de ejecución arrojará un error fatal en el momento en que el recolector de basura intente liberar objetos:

<?php class MyParent { private function __destruct() { echo ''Parent::__destruct''; } } class MyChild extends MyParent { private function __destruct() { echo ''Child::__destruct''; parent::__destruct(); } } $myChild = new MyChild(); $myChild = null; $myChild = new MyChild(); ?>

salidas

Fatal error: Call to private MyChild::__destruct() from context '''' in D:/www/scratchbook/destruct.php on line 20

(¡Gracias a Mark Biek por el excelente ejemplo!)