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
?>