Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Varios constructores?

Estas en el tema de Varios constructores? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Me gustaria saber si una clase puede tener varios constructores. En caso afirmativo ¿a partir de qué version de php?. Gracias por la ayuda....
  #1 (permalink)  
Antiguo 13/01/2006, 05:45
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 20 años, 7 meses
Puntos: 4
Varios constructores?

Hola,

Me gustaria saber si una clase puede tener varios constructores. En caso afirmativo ¿a partir de qué version de php?.

Gracias por la ayuda.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
  #2 (permalink)  
Antiguo 13/01/2006, 08:21
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: Varios constructores?

Cita:
Hola,

Me gustaria saber si una clase puede tener varios constructores. En caso afirmativo ¿a partir de qué version de php?.

Gracias por la ayuda.
__________________
Ta Luego!
Buenass, pues solo se puede tener un constructor, aunque supongo q te refieres si se puede sobrecargar con diferentes parámetros, la respuesta es no. Aunque cada clase tiene su constructor por ejemplo el constructor de cada clase és único y no se sobrecarga, es decir, si tienes una clase que hereda de otra los constructores serán independientes no así como los métodos que si se declaran los mismo en la clase hija se se redeclarará el contenido. Esto al menos en PHP5.
  #3 (permalink)  
Antiguo 13/01/2006, 08:46
 
Fecha de Ingreso: enero-2003
Ubicación: La Florida, Stgo
Mensajes: 40
Antigüedad: 21 años, 3 meses
Puntos: 0
pero podrías usar parámetros opcionales en tu constructor... por ejemplo

function Sumar($fact_1, $fact_2 = 5){
return $fact_1 + $fact_2;
}
Así, puedes usar el constructor de 2 maneras:
echo Suma(3);// devuelve 8
echo Suma(3, 4);// devuelve 7

salu2
__________________
:neurotico:neurotico:neurotico:neurotico:neurotico :neurotico:neurotico:neurotico:neurotico:neurotico :neurotico:neurotico:neurotico:neurotico:neurotico
  #4 (permalink)  
Antiguo 13/01/2006, 09:02
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Si te pongo un ejemplo (recuerda estamos en la versión php5):
Código PHP:
class Suma{
    
    private 
$resultado;
    
    public function 
__construct($param1$param2=5){
        
$this->resultado =  ((int)$param1 $param2);
    }
    
    public function 
__toString(){
        return 
"El valor es-> ".$this->resultado;[CODE][/CODE]
    }

}

$objA = new Suma(2);
echo 
$objA;

$objB = new Suma(2,2);
echo 
$objB
El resultado es:
Código:
 
El valor es-> 7
El valor es-> 4
De esta manera si que lo puedes utilizar pero recuerda que puede ser peligroso normalmente en estos casos tenemos que validar las variables para obtener el resultado esperado más bien para no obtener un resultado inesperado.
  #5 (permalink)  
Antiguo 13/01/2006, 10:52
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas.

Aunque php no incorpora ni sobrecarga ni polimorfismo, si necesitás estas características se pueden "simular", para que un método o un constructor haga una u otra rutina a partir de la cantidad y el tipo de parámetros que recibe.

Un ejemplo en PHP5, que se puede adaptar fácilmente a PHP4, tomando como tipos de datos posibles String y numeric, con cero, uno o dos parámetros.

Código PHP:
<?php
class Test {
    private 
$resultado;
    
    public function 
__construct($arg1=NULL,$arg2=NULL) {
        
$args func_num_args();
        switch (
$args) {
            case 
0:
                
$this->resultado "no se pasaron argumentos";
                break;
            case 
1:
                if (
is_string($arg1)) {
                    
$this->resultado "argumento1(string)= $arg1";
                } elseif (
is_numeric($arg1)) {
                    
$this->resultado "argumento2(num)=" $arg1;
                }
                break;
            case 
2:
                if (
is_string($arg1)) {
                    if (
is_string($arg2)) {
                        
$this->resultado "argumento1(str)= $arg1 ; argumento2(str) = $arg2";
                    } elseif (
is_numeric($arg2)) {
                        
$this->resultado "argumento1(str)= $arg1 ; argumento2(num) = $arg2";
                    }
                } elseif (
is_numeric($arg1)) {
                    if (
is_string($arg2)) {
                        
$this->resultado "argumento1(num)= $arg1 ; argumento2(str) = $arg2";
                    } elseif (
is_numeric($arg2)) {
                        
$this->resultado $arg1+$arg2;
                    }
                } 
                break;
        }
    }
    
    public function 
__toString(){
        return 
"resultado->".$this->resultado;
    }

}

$objSinParam = new Test();        // resultado->no se pasaron argumentos
$objStr = new Test("a");         // resultado->argumento1(string)= a
$objNum = new Test(1);            // resultado->argumento2(num)=1
$objStrNum = new Test("a",1);    // resultado->argumento1(str)= a ; argumento2(num) = 1
$objNumStr = new Test(1,"a");    // resultado->argumento1(num)= 1 ; argumento2(str) = a
$objStrStr = new Test("a","a");    // resultado->argumento1(str)= a ; argumento2(str) = a
$objNumNum = new Test(1,2);        // resultado->3

?>
  #6 (permalink)  
Antiguo 13/01/2006, 13:39
Avatar de elangelcaido  
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 1.068
Antigüedad: 20 años, 7 meses
Puntos: 4
Gracias a todos por la ayuda!
__________________
Ta Luego! Al final sólo puede quedar uno...
________
lukos.org
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 05:42.