¿La "visibilidad" de la función __destruct()
debería ser pública o alguna otra cosa? Intento escribir un documento de normas para mi grupo y surgió esta pregunta.__destruct visibilidad para PHP
19
A
Respuesta
23
Además de la respuesta de Mark Biek:
públicaLa función __destruct() debe ser declarado. De lo contrario, la función no se ejecutará en el cierre del 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, pero no está limpio.
Pero lo más importante acerca de esto: Si el destructor se declara privada o protegida, el tiempo de ejecución arrojará un error fatal en el momento en que el recolector de basura trata de objetos libres:
<?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!)
8
Creo que tendría que ser público en el caso donde una subclase necesita llamar explícitamente al método __destruct de la clase padre.
Algo como esto podría producir 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();
?>
Cuestiones relacionadas
- 1. ¿Cuándo __destruct no se llamará en PHP?
- 2. ¿Debo usar unset en php __destruct()?
- 3. Visibilidad orientada a objetos php
- 4. ¿Qué tan confiable es __destruct?
- 5. visibilidad constante de la clase php
- 6. Comprobación de la visibilidad método en PHP
- 7. Actualizando la base de datos en __destruct()?
- 8. Visibilidad estándar para métodos abstractos
- 9. Visibilidad predeterminada de los métodos de clase en PHP
- 10. Herencia de PHP y visibilidad de miembro protegido
- 11. jQuery if declaración para verificar la visibilidad
- 12. Magento: Obtenga visibilidad del producto
- 13. Visibilidad: colapso se representa como la visibilidad: oculto
- 14. Vinculación Visibilidad en XAML a una propiedad de Visibilidad
- 15. Java: ¿visibilidad del subpaquete?
- 16. Visibilidad Java campo privado
- 17. DataGridTextColumn Visibilidad Encuadernación
- 18. Concurrencia, visibilidad del objeto
- 19. Android Vista Visibilidad GONE
- 20. visibilidad: visible/oculto div
- 21. Visibilidad atributo cuestionar
- 22. Silverlight DataGridTextColumn Vinculación Visibilidad
- 23. paquete de visibilidad
- 24. Visibilidad en subpaquetes
- 25. WPF Tooltip Visibilidad
- 26. Php Destructors
- 27. Mostrar visibilidad en Argo UML
- 28. versión-script y visibilidad oculta
- 29. Java clase interna rompecabezas visibilidad
- 30. cambiando la visibilidad usando javascript
Eso es un buen descargo de mi respuesta. +1 para ti :) –