¿Para qué está sobrecargando la función PHP?

En idiomas como Java, la sobrecarga se puede usar de esta manera:

void test($foo, $bar){} int test($foo){} 

Luego, si llamó a test() con 2 argumentos, por ejemplo, test($x, $y); , se llamaría la primera función. Si pasó solo 1 argumento, por ejemplo, test($x); , se llamaría la segunda función.

Del manual parece que php 5 tiene sobrecarga, pero ¿para qué sirve? Parece que no puedo entender el manual sobre este tema …

El significado de sobrecarga de PHP es diferente al de Java. En PHP, la sobrecarga significa que puede agregar miembros de objeto en tiempo de ejecución, mediante la implementación de algunos de los métodos __magic , como __get , __set , __call , __callStatic . Cargas objetos con nuevos miembros.

La sobrecarga en PHP proporciona medios para “crear” dinámicamente propiedades y métodos. Estas entidades dinámicas se procesan a través de métodos mágicos que uno puede establecer en una clase para varios tipos de acciones.

Un ejemplo:

 class Foo { public function __call($method, $args) { echo "Called method $method"; } } $foo = new Foo; $foo->bar(); // Called method bar $foo->baz(); // Called method baz 

Y, por cierto, PHP soporta este tipo de sobrecarga desde PHP 4.3.0. La única diferencia es que en versiones anteriores a PHP 5 tenía que activar de forma explícita la sobrecarga usando la función overload() .

Si desea sobrecargar una función como en Java, no especifique ningún argumento y use la función func_num_args y func_get_args para obtener el número de argumentos o los argumentos que se pasaron a esa función:

 function test() { $args = func_get_args(); switch (count($args)) { case 1: // one argument passed break; case 2: // two arguments passed break; default: // illegal numer of arguments break; } } 

Para sobrecargar una función simplemente pase el parámetro como nulo por defecto,

 class ParentClass { function mymethod($arg1 = null, $arg2 = null, $arg3 = null) { if( $arg1 == null && $arg2 == null && $arg3 == null ){ return 'function has got zero parameters 
'; } else{ $str = ''; if( $arg1 != null ) $str .= "arg1 = ".$arg1."
"; if( $arg2 != null ) $str .= "arg2 = ".$arg2."
"; if( $arg3 != null ) $str .= "arg3 = ".$arg3."
"; return $str; } } } // and call it in order given below ... $obj = new ParentClass; echo '
$obj->mymethod()
'; echo $obj->mymethod(); echo '
$obj->mymethod(null,"test")
'; echo $obj->mymethod(null,'test'); echo '
$obj->mymethod("test","test","test")
'; echo $obj->mymethod('test','test','test');