A linguagem PHP, em relação a sobrecarga de métodos, é diferente outras linguagem 
                como Java, C# e Vb.Net. Nessas linguagens, realizamos a sobrecarga de forma natural 
                e intuitiva, mantendo-se os métodos com os mesmos nomes e variando o número 
                de parâmetros e seus tipos.
            
            //exemplo em Java
class Teste {
    public void metodo1(){
        //omitido
    }
    public void metodo1(int param){
        //omitido   
    }
    public void metodo1(int param, String param2){
        //omitido    
    }
} 
            
                A linguagem PHP não permite tal forma de sobrecarga. Para atingirmos o mesmo 
                resultado precisamos implementar o método especial chamado de __call. 
            
            Sintaxe
            
__call($name, $arguments){
 //corpo
}
            Onde
            
$name: nome do método invocado
$arguments: argumentos passados para método $name
            
                O método especial acima é executado, quando declarado em um classe, automaticamente quando tentamos acessar 
                um método inacessível, ou que não existe, de um objeto. 
            
            Exemplo 5
            
//MinhaClasse.php
<?php
class MinhaClasse {
    public function __call(string $name, array $arguments)
    {
        echo "__call: ",$name,"\n"; //
        var_dump($arguments);
    }
}
?>
//main.php
<?php
    include("MinhaClasse.php");
    
    $obj = new MinhaClasse();
    $obj->metodo1(); //sem argumento
    $obj->metodo1(1,"string"); //com argumento
?>
            Saída
            
__call: metodo1
array(0) {
}
__call: metodo1
array(2) {
  [0]=>
  int(1)
  [1]=>
  string(6) "string"
}
            
                Implementando o método __call, esse servirá de ponte para a execução da chamada de outros métodos com 
                diferentes números de argumentos.
            
            
                Os métodos para a simulação da sobrecarga devem ser declarados com o modificador de 
                acesso private para que nenhuma classe possa acessá-los.
            
            
                Com auxílio das funções array_keys e também count podemos trabalhar 
                com os argumentos passados para o métodos __call.
            
            Sintaxe
            
array_keys(array $array): array
            Sintaxe
            
count(Countable|array $value, int $mode = COUNT_NORMAL): int
            Exemplo 6
            
//MinhaClasse.php
<?php
class MinhaClasse
{
	private function metodo1() {
		echo "metodo1() invocado.","\n";
	}
	private function metodo2($param) {
		echo "metodo2() invocado.","\n";
		echo "  param: \"$param\"";
	}
	//mC)todo usado como ponte para "sobrecarga"
	public function __call($name, $arguments)
	{
		$chaves = array_keys($arguments); //array de argumentos
		$args = count($arguments); //nC:mero de argumentos passados
        
		if ($name == "metodo1")
		{
			if($args == 0)
				$this->metodo1();
			if($args > 0)
				$this->metodo2($arguments[$chaves[0]]);
		}
	}
}?>
//main.php
<?php
    include("MinhaClasse.php");
    
    $obj = new MinhaClasse();
    $obj->metodo1(); //método1
    $obj->metodo1("string"); //método2 indiretamente
?>
            Saída
            
metodo1() invocado.
metodo2() invocado.
  param: "string"
            
                O exemplo 6 acima foi feito apenas como caracter ilustrativo da simulação de 
                sobrecarga discutida, não sendo uma solução final.