Ya estamos inmersos en el movimiento de migración masivo hacia PHP 5, un gran paso para todos ya que esta versión del lenguaje de programación ofrece muchas mejoras que tanto desarrollador como usuario van a percibir.
Pese a que la implementación de objetos está mucho mejor conseguida que en la versión 4, aún flojea en ciertos puntos y tenemos que hacer nuestras peripécias para conseguir efectos similares.
Sobrecarga
La sobrecarga es un propiedad que indica que podemos definir funciones con el mismo nombre, pero con diferente número y/o tipo de parámetros, dependiendo de ellos se ejecutará una función u otra. Algo muy normal en Java sería algo así.
class Pruebas {
public void Pruebas(){
System.out.println("Hola Pruebas");
}
public void Pruebas(String name) {
System.out.println("Hola " + name);
}
public void Pruebas(String firstName, String lastName){
System.out.println("Hola " + firstName + " " + lastName);
}
}
Como podemos ver tenemos declarados 3 constructores (funciones que inicializan el objeto Pruebas) que reciben diferente número de parámetros, de esta forma podremos llamarlos dependiendo del número de parámetros que pasemos a la función con el mismo nombre.
Pero esta propiedad no está disponible por defecto en la versión 5 de PHP, aúnque en el mismo manual nos muestra un ejemplo de como conseguir emularlo y poder disfrutar de la potencia de la sobrecarga.
<?php
class Pruebas {
function __call($method_name, $arguments) {
$accepted_methods = array("hello");
if(!in_array($method_name, $accepted_methods)) {
trigger_error("Method <strong>$method_name</strong> no existe", E_USER_ERROR);
}
if(count($arguments) == 0) {
$this->Pruebas1();
} elseif(count($arguments) == 1) {
$this->Pruebas2($arguments[0]);
} elseif(count($arguments) == 2) {
$this->Pruebas3($arguments[0], $arguments[1]);
} else {
return false;
}
}
function Pruebas() {
echo "Hola Pruebas";
}
function Pruebas($name){
echo "Hola $name";
}
function Pruebas($first_name, $last_name){
echo "Hola $first_name, $last_name<br>";
}
}
$ot = new Pruebas();
$ot->Pruebas();
$ot->Pruebas("John");
$ot->Pruebas("John", "Smith");
?>
Como podemos ver declaramos la función __call()
, esta función es muy útil para controlar excepciones y reforzar el código.
La función __call
Se trata de un método «mágico» que permite capturar la invocación de métodos no existentes. Esté método puede ser redefinido para cubrir las necesidades del proyecto o como en este caso, proporcionar sobrecarga a nuestros scripts. Aprovechando está funcionalidad podemos controlar la función a la que estamos llamando y redirigir a la función concreta a la que hacemos referencia.
mixed __call ( string $name, array $arguments )
La función _call()
recibe dos parámetros:
$name -> El nombre del método
$arguments -> Los argumentos pasados a la función.
9 comentarios, 1 referencias
+
#