Sólo en el método run Paré no clase, no de clase del niño

  • benwade9721
  • Novice
  • Novice
  • Avatar de Usuario
  • Registrado: Ene 20, 2009
  • Mensajes: 17
  • Status: Offline

Nota Julio 6th, 2010, 1:47 am

Hola a todos,

Estoy tratando de crear una clase en PHP que va a ser heredada...
La clase contiene un constructor que tengo que llamar en ambas clases, pero necesito una forma de ejecutar sólo parte de la construcción de una vez, es decir, carreras en la pare no, pero no se ejecuta cuando la clase se ha prorrogado por un niño de clase...??

Código: [ Select ]
<?
class Parent_Class
{
    function __construct()
    {
        if([color=#FF0000]this is parent class[/color])
        {
            echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
        }
    }
}

class Child_Class extends Parent_Class
{
    function __construct()
    {
        parent::__construct();
    }
}


?>
  1. <?
  2. class Parent_Class
  3. {
  4.     function __construct()
  5.     {
  6.         if([color=#FF0000]this is parent class[/color])
  7.         {
  8.             echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
  9.         }
  10.     }
  11. }
  12. class Child_Class extends Parent_Class
  13. {
  14.     function __construct()
  15.     {
  16.         parent::__construct();
  17.     }
  18. }
  19. ?>


¿Alguien tiene alguna idea?
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Julio 6th, 2010, 1:47 am

  • righteous_trespasser
  • Scuffle
  • Genius
  • Avatar de Usuario
  • Registrado: Mar 12, 2007
  • Mensajes: 6228
  • Loc: South-Africa
  • Status: Offline

Nota Julio 7th, 2010, 12:16 am

benwade9721 escribió:
Hola a todos,

Estoy tratando de crear una clase en PHP que va a ser heredada...
La clase contiene un constructor que tengo que llamar en ambas clases, pero necesito una forma de ejecutar sólo parte de la construcción de una vez, es decir, carreras en la pare no, pero no se ejecuta cuando la clase se ha prorrogado por un niño de clase...??

Código: [ Select ]
<?
class Parent_Class
{
    function __construct()
    {
        if([color=#FF0000]this is parent class[/color])
        {
            echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
        }
    }
}

class Child_Class extends Parent_Class
{
    function __construct()
    {
        parent::__construct();
    }
}


?>
  1. <?
  2. class Parent_Class
  3. {
  4.     function __construct()
  5.     {
  6.         if([color=#FF0000]this is parent class[/color])
  7.         {
  8.             echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
  9.         }
  10.     }
  11. }
  12. class Child_Class extends Parent_Class
  13. {
  14.     function __construct()
  15.     {
  16.         parent::__construct();
  17.     }
  18. }
  19. ?>


¿Alguien tiene alguna idea?

Tal vez algo como esto:

Código: [ Select ]
<?
class Parent_Class
{
    function __construct($child = false)
    {
        if($child == false)
        {
            echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
        }
    }
}

class Child_Class extends Parent_Class
{
    function __construct()
    {
        parent::__construct(true);
    }
}


?>
  1. <?
  2. class Parent_Class
  3. {
  4.     function __construct($child = false)
  5.     {
  6.         if($child == false)
  7.         {
  8.             echo 'This is echoed from the parent class, and not echoed when this class is extended by another class';
  9.         }
  10.     }
  11. }
  12. class Child_Class extends Parent_Class
  13. {
  14.     function __construct()
  15.     {
  16.         parent::__construct(true);
  17.     }
  18. }
  19. ?>
Let's leave all our *plum* where it is and go live in the jungle ...
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13458
  • Loc: Florida
  • Status: Offline

Nota Julio 7th, 2010, 11:17 am

Si quieres algo condicional flexible, Id probablemente ir con lo publicado RT. Si simplemente desea evitar que la ampliación de las clases llamando al constructor base de clases, los theres esto.

PHP Código: [ Select ]
<?php
 
class base
{
   public function __construct()
   {
      if(get_class($this) != __CLASS__) return;
 
      echo 'base::__construct()<br>', PHP_EOL;
   }
}
 
class extension extends base
{
   public function __construct()
   {
      echo 'extension::__construct()<br>', PHP_EOL;
      parent::__construct();
   }
}
 
$obj = new base();
echo '<hr>', PHP_EOL;
$obj = new extension();
 
?>
  1. <?php
  2.  
  3. class base
  4. {
  5.    public function __construct()
  6.    {
  7.       if(get_class($this) != __CLASS__) return;
  8.  
  9.       echo 'base::__construct()<br>', PHP_EOL;
  10.    }
  11. }
  12.  
  13. class extension extends base
  14. {
  15.    public function __construct()
  16.    {
  17.       echo 'extension::__construct()<br>', PHP_EOL;
  18.       parent::__construct();
  19.    }
  20. }
  21.  
  22. $obj = new base();
  23. echo '<hr>', PHP_EOL;
  24. $obj = new extension();
  25.  
  26. ?>


Comentario la línea siguiente si desea ver a los dos constructores se llama así por lo general funciona.

PHP Código: [ Select ]
if(get_class($this) != __CLASS__) return;
Strong with this one, the sudo is.
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de Usuario
  • Registrado: May 21, 2004
  • Mensajes: 3229
  • Loc: South Africa
  • Status: Offline

Nota Octubre 9th, 2010, 9:49 am

Lo que también podría considerar hacer es eliminar el código de inicialización del constructor y el uso de una fábrica? De esta manera le da mucho más control sobre la construcción de la clase en lugar de tener que cosido en el caso de las declaraciones más
Watch me grow

Publicar Información

  • Total de mensajes en este tema: 4 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 152 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC