11

Métodos mágicos en PHP

Métodos mágicos en PHP

Los siguientes son métodos mágicos:

  • __construct()
  • __destruct()
  • __call()
  • __callStatic()
  • __get()
  • __set()
  • __isset()
  • __unset()

Faltan otros pero, estos son los más utilizados. No se pueden tener métodos con los nombres anteriores en ninguna de las clases a no ser que desees hacer uso de estas funcionalidades. Empezamos definiendo cada una de éstas y a su vez les mostraré un pequeño ejemplo.

__construct(): Éste es el método mágico más utilizado en php porque este es llamado automáticamente cuando se crea el objeto, éste a su vez puede llevar parámetros.

class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;

    public function __construct(){
        echo "Hola, aún no te has identificado";
    }
}

$cliente = new RetirarDineroDelCajero();
class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;
    private $documento = [
        '252423' => 'Maria',
        '10075658' => 'Pepito Perez'
    ];

    public function __construct($identificacion){
        foreach ($this->documento as $key => $value) {
            if ($identificacion == $key) {
                    echo "Bienvenida $value a tu cajero de retiro";
            }
        }
    }
}

$cliente = new RetirarDineroDelCajero('252423');

__destruct(): Éste también se llama automáticamente pero, al finalizar el proceso del objeto creado. Se suele utilizar para destruir o eliminar referencia. Su uso más habitual es para cerrar una conexión a base de datos cada vez que haces una consulta. Éste no recibe parámetros aunque se podría pero, lo recomendable es no pasarle parámetros.

class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;
    private $nameSession;
    private $documento = [
        '252423' => 'Maria',
        '10075658' => 'Pepito Perez'
    ];

    public function __construct($identificacion){
        foreach ($this->documento as $key => $value) {
            if ($identificacion == $key) {
                $this->nameSession = $value;
                $this->numeroDocumento = $key;
                echo "Bienvenida $value a tu cajero de retiro <br><br>";
            }
        }
    }

    public function __destruct(){
        echo "Destuyendo la sesión de $this->nameSession <br>";
        echo "Sesión cerrada exitosamente";
    }
}

$cliente = new RetirarDineroDelCajero('10075658');

__call(): Éste método es lanzado al llamar o invocar un método o función inaccesible o inexistente desde un contexto del objeto.

__callStatic(): Éste método es lanzado al llamar o invocar un método o función inaccesible o inexistente desde un contexto estático.

class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;
    private $nameSession;
    private $documento = [
        '252423' => 'Maria',
        '10075658' => 'Pepito Perez'
    ];

    public function __construct($identificacion){
        foreach ($this->documento as $key => $value) {
            if ($identificacion == $key) {
                $this->nameSession = $value;
                $this->numeroDocumento = $key;
                echo "Bienvenida $value a tu cajero de retiro <br><br>";
            }
        }
    }

    public function __call($metodo, $parametros){
        $mensaje = "Método inaccesible: -> $metodo, Parámetros -> ";
        foreach ($parametros as $parametro) {
            $mensaje .= "$parametro ' ";
        }
        echo "$mensaje <br>";
    }

    public static function __callStatic($metodo, $parametros){
        $mensaje = "Método inaccesible: -> $metodo, Parámetros -> ";
        foreach ($parametros as $parametro) {
            $mensaje .= "$parametro ' ";
        }
        echo "$mensaje <br>";
    }

    public function __destruct(){
        echo "Destuyendo la sesión de $this->nameSession <br>";
        echo "Sesión cerrada exitosamente";
    }

} 

$cliente = new RetirarDineroDelCajero('10075658');
$cliente->tarjetaDeCredito(544455, "46544-5436-5484-558");
echo "<br><br>";
$cliente::tarjetaDeCredito(544455, "46544-5436-5484-558");

__set(): Método utilizado para asignar un valor a una propiedad no visible, también se puede crear nuevas propiedades de una clase.

__get(): Método utilizado para consultar datos a partir de propiedad no visible.

class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;
    private $documento = [
        '252423' => 'Maria',
        '10075658' => 'Pepito Perez'
    ];

    public function __construct($identificacion){
        foreach ($this->documento as $key => $value) {
            if ($identificacion == $key) {
                $this->nameSession = $value;
                $this->numeroDocumento = $key;
                echo "Bienvenida $value a tu cajero de retiro <br><br>";
            }
        }
    }

    public function __destruct(){
        echo "Destuyendo la sesión de $this->nameSession <br>";
        echo "Sesión cerrada exitosamente";
    }

    public function __call($metodo, $parametros){
        $mensaje = "Método inaccesible: -> $metodo, Parámetros -> ";
        foreach ($parametros as $parametro) {
            $mensaje .= "$parametro ' ";
        }
        echo "$mensaje <br>";
    }

    public function __set($propiedad, $valor){
        return $this->$propiedad = $valor;
    }

    public function __get($propiedad){
        if (property_exists($this, $propiedad)) {
            return $this->$propiedad;
        }
    }
    
}

$cliente = new RetirarDineroDelCajero('10075658');
$cliente->tarjetaDeCredito(544455, "46544-5436-5484-558");
echo "<br><br>";
$cliente->numeroDocumento = 2547896;
echo "Acabas de ingresar con el documento No.$cliente->numeroDocumento <br>";
$cliente->nameSession = "Anónimo";
echo "<br><br>";
echo "Nombre del usuario: $cliente->nameSession";
echo "<br><br>";

__isset(): Método utilizado para verificar la existencia de un array o propiedad, se lanza al llamar a isset() o a empty() sobre propiedades inaccesibles.

__unset(): Elimina un array o propiedad de la clase, este se invoca cuando se usa unset() sobre propiedades inaccesibles.

class RetirarDineroDelCajero {
    private $cajero =  "8523 Guapi";
    private $numeroDocumento;
    private $nameSession;
    private $documento = [
        '252423' => 'Maria',
        '10075658' => 'Pepito Perez'
    ];

    public function __construct($identificacion){
        foreach ($this->documento as $key => $value) {
            if ($identificacion == $key) {
                $this->nameSession = $value;
                $this->numeroDocumento = $key;
                echo "Bienvenida $value a tu cajero de retiro <br><br>";
            }
        }
    }

    public function __destruct(){
        echo "Destuyendo la sesión de $this->nameSession <br>";
        echo "Sesión cerrada exitosamente";
    }

    public function __call($metodo, $parametros){
        $mensaje = "Método inaccesible: -> $metodo, Parámetros -> ";
        foreach ($parametros as $parametro) {
            $mensaje .= "$parametro ' ";
        }
        echo "$mensaje <br>";
    }

    public function __set($propiedad, $valor){
        return $this->$propiedad = $valor;
    }

    public function __get($propiedad){
        if (property_exists($this, $propiedad)) {
            return $this->$propiedad;
        }
    }

    public function __isset($propiedad){
        return isset($this->$propiedad);
    }

    public function __unset($propiedad){
        unset($this->$propiedad);
    }
    
}

$cliente = new RetirarDineroDelCajero('10075658');
echo "<br><br>";
$cliente->numeroDocumento = 2547896;
echo "La propiedad numeroDocumento existe: ". isset($cliente->numeroDocumento)."<br>";
unset($cliente->numeroDocumento);
echo "Comprobando si numeroDocumento existe: ".var_dump($cliente);
echo "<br><br>";
Escribe tu comentario
+ 2
1

Using the one of the best simple way to find screen shot in mac mac os x i hope you try to understand this process.