quarta-feira, 20 de abril de 2011

Dicas de Programação: Como sobrecarregar construtores em PHP

Teoricamente, não dá para sobrecarregar construtores em PHP...
Mas existe uma artimanha... Por exemplo, eu quero ter dois construtores, um com um parâmetro, outro com dois parâmetros:

<?php
class MinhaClasse {

//Construtor oficial
public function __construct() {
//Obtenho os argumentos passados
$args = func_get_args();
//Obtenho a quantidade de argumentos
$num_args = func_num_args();
//Obtenho o "nome" do construtor
$func = "__construct_$num_args";
//Se o "construtor" existe...
if (method_exists($this, $func)) {
//Executo ele
call_user_func_array(array($this, $func), $args);
//Se ele não existe...
} else {
//Lanço uma exceção.
throw new Exception('Construtor não existe');
}
}

//Nome do construtor com 1 argumento
private function __construct_1($parametro1) {
...
}

//Nome do construtor com 2 argumentos
private function __construct_2($parametro1, $parametro2) {
...
}
}
?>

Assim, quando você passar um parâmetro ao construtor:

MinhaClasse m = new MinhaClasse(1);

O construtor verifica o número de parâmetros e chama a função correta que vai executa-la.

É, para tudo, sempre tem um jeito... :P

Nenhum comentário: