Foros del Web » Programando para Internet » PHP »

No entiendo bien __desctruct

Estas en el tema de No entiendo bien __desctruct en el foro de PHP en Foros del Web. Estoy en la guía ( http://php.net/manual/es/language.oop5.decon.php ) No se si lo entiendo, pero supongo que un destructor no destruye nada directamente, supongo que es algo ...
  #1 (permalink)  
Antiguo 10/03/2016, 15:15
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
No entiendo bien __desctruct

Estoy en la guía (http://php.net/manual/es/language.oop5.decon.php)

No se si lo entiendo, pero supongo que un destructor no destruye nada directamente, supongo que es algo que se aplica después de llamar un método en una clase

supongo que si llamo MyClase::MiMetodo primero se aplicaría el constructor, después el método llamado y después el destructor

Código PHP:
class MyDestructableClass {
   function 
__construct() {
       print 
"En el constructor\n";
       
$this->name "MyDestructableClass";
   }

   function 
__destruct() {
       print 
"Destruyendo " $this->name "\n";
   }
}


$obj = new MyDestructableClass(); 

Código PHP:
class Negrita {
   function 
__construct() {
       print(
'<b>');
   }

   static function 
Negrita($txt){
           print(
$txt);
   }

   function 
__destruct() {
       print(
'</b>');
   }
}

$obj = new Negrita();
$obj->Negrita('Negrito');

Negrita::Negrita('Negrita'); 
¿Porque me devuelve las dos palabras así?
Código:
<b>NegritoNegrita</b>
En vez de así:
Código:
<b>Negrito</b><b>Negrita</b>

He intentado cambiar esto:
Código PHP:
        static function Negrita($txt){
            print 
$txt;
        } 
Por esto:
Código PHP:
        static function Negrita($txt){
            return 
$this->getvalor($txt);
        }
        public function 
getValor($txt){
            print 
$txt;
        } 

Última edición por quico5; 10/03/2016 a las 16:58
  #2 (permalink)  
Antiguo 11/03/2016, 00:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No entiendo bien __desctruct

Cita:
No se si lo entiendo, pero supongo que un destructor no destruye nada directamente, supongo que es algo que se aplica después de llamar un método en una clase
Estás entendiendo muy mal el concepto de construcción y destrucción de una instancia de clase.

Claramente el "constructor" se ejecuta cuando creas una instancia nueva de una clase usando new.

Y bueno, el "destructor" no se ejecuta al finalizar ningún método: como dice su nombre "se invoca cuando se destruye" la instancia, ejemplo:
Código PHP:
Ver original
  1. class Foo {
  2.   public function __construct() { echo 'A'; }
  3.   public function __destruct() { echo 'Z'; }
  4. }
  5.  
  6. $x = new Foo(); // echo 'A';
  7. $x = null;  // echo 'Z';

Al usar "$x = null" estamos básicamente destruyendo la instancia asignada a $x al cambiar la referencia, entonces el recolector de basura se encarga de ello e invoca al destructor de dicha instancia antes de destruirla de memoria.

La forma directa de "destruir" una instancia es indicarle al "garbage collector" que ya no la necesitas.

La forma indirecta es cuando el script finaliza su ejecución, que es exactamente lo que te sucede a ti y por eso no te das cuenta de cuando se invoca el constructor.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/03/2016, 05:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: No entiendo bien __desctruct

Aunque realmente lo que buscas es muy probable si aplicas el patrón decorator para decorar tus estilos.

Saludos

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.