Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/01/2006, 10:52
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 4 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

?>