Skip to content

8 type hinting en php

@intelguasoft edited this page Jan 22, 2020 · 1 revision

Curso Master PHP

Determinación de tipos (Type hinting)

Desde PHP 5 es posible utilizar el type hinting, o la determinación de tipos, que permite especificar el tipo de datos que se espera de un argumento en la declaración de una función. Cuando se llama a la función, PHP comprobará si los argumentos son del tipo especificado, y sino lo son se emitirá un error y la ejecución se detendrá.

Los tipos soportados por esta característica (en PHP 5.5) son: arrays, clases, interfaces, y callables.

El objetivo de la determinación de tipos es organizar mejor el código y mejorar el manejo de los errores.

¿Cuándo utilizar type hinting?

Cuando queremos forzar a una función a aceptar sólo argumentos de un tipo. Su uso más común es con objetos, indicando el nombre de la clase:

class Aguacate {
    public $calorias = 100;
}
class Persona {
    public $energia;
    public function comerAguacate (Aguacate $aguacate) {
        $this->energia += $aguacate->calorias;
    }
    public function mostrarEnergia(){
        return "Energía actual: " . $this->energia . "<br>";
    }
}
$sonia = new Persona;
$almuerzo = new Aguacate;
$sonia->comerAguacate($almuerzo);
$sonia->comerAguacate($almuerzo);
echo $sonia->mostrarEnergia(); // Devuelve: Energía actual 200

En el ejemplo anterior, hemos forzado a que el argumento que se pasa a la función comerAguacate() sea un objeto de la clase Aguacate. Si el $almuerzo no fuera un objeto de la clase Aguacate, no se podría emplear la función comerAguacate(). Si por ejemplo en el ejemplo anterior cambiamos el almuerzo por un string kiwi:

$almuerzo = "Kiwi";
$sonia->comerAguacate($almuezo);
// Devuelve: Catchable fatal error: Argument 1 passed to Persona::comerAguacate() must be an instance of Aguacate, string given

Es necesario crear una instancia de Aguacate para que comerAguacate() acepte el argumento.

Vamos a poner otro ejemplo, ahora queremos que el argumento que se acepte sea del tipo array:

class Persona {
    public $energiaMedia;
    public $comidas;
    public function calcularEnergia(array $comidas)
    {
        $numeroComidas = count($comidas);
        $energiaTotal = $numeroComidas * $this->energiaMedia;
        return $energiaTotal;
    }
}
$sonia = new Persona;
// Energía media que proporciona cada comida:
$sonia->energiaMedia = 480;
// Total de comidas:
$comidas = array("Desayuno", "Almuerzo", "Comida", "Cena");
// Calcular la energía:
echo $sonia->calcularEnergia($comidas); // Devuelve 1920

La función calcularEnergia() exige que el argumento sea un array. Si cambiamos el argumento y ponemos un integer, dará error:

$comidas = 4;
echo $sonia->calcularEnergia($comidas);
// Catchable fatal error: Argument 1 passed to Persona::calcularEnergia() must be of the type array, integer given
Anterior Siguiente

Indice de contenidos

Básicos Sintaxis básica
Operadores
Operadores bit a bit
Variables
Estructuras de control
Constantes y constructores base
Espacio de nombres
Extensiones
Configuraciones
Variables al descubierto
Recolector de basuras
Rendimiento (Performance)
Funciones Funciones
Argumentos en funciones
Funciones variables
Valores por referencia en funciones
Funciones que devuelven algo
Ámbito de variables
Funciones anónimas y closure's
Cadenas y patrones Las comillas y las cadenas de caracteres
Heredoc y Nowdoc
Comparando cadenas de caracteres
Extracción en cadenas de caracteres
Análisis en cadenas de caracteres
Reemplazos en cadenas de caracteres
Formato de cadena de caracteres
Expresiones regulares (RegEx)
Codificación de caracteres
Codificación en cadenas de caracteres
Arreglos (Array's) Arreglos
Arreglos asociativos
Iterar arreglos
Funciones de arreglos
SPL Arreglos mediante objetos
Conversión de arreglos
Archivos (I/O) Manejo de archivos
Lectura de archivos
Escritura de archivos
Funciones del sistema de archivos
Socket's y archivos
Streams (?)
Seguridad Concepto y funcionamiento CGI
Configurando la seguridad
Seguridad en Sesiones
Ataques XSS
Ataques CSRF
Ataques SQLInjection
Ataques CodeInjection
Ataques EmailInjection
Filtrado de datos de entrada
Escape de datos de salida
Encriptación y contraseñas
Seguridad en el almacenamiento de datos
Seguridad en la subida de datos
SSL y OpenSSL
Base de datos Principios básicos SQL
Los joins en SQL
Principales funciones SQL
Preparando sentencias SQL
Transacciones en SQL
Algo de PDO
Programación Orientada a Objetos Instancias de clases
Modificadores y herencia de clases
Interfaces
Excepciones
Auto-carga (Autoload)
Reflexión (Reflection)
Determinación de tipos (Type hinting)
Constantes de clase
Enlace estático de ejecución (Late Static Binding)
Métodos mágicos
Librería estándar PHP (SPL)
Generadores (Generators)
Traits
Clases abstractas
Formatos de información Algo de XML
Algo de SimpleXML
Algo de XML Parser
Algo de PHP DOM
Algo de Web Services
Web Services con SOAP
Algo de REST
Algo de JSON
Formato de fecha y hora
Características web's Sesiones
Formularios
Métodos GET y POST
Cookies
Protocolo HTTP y sus headers
Autenticación HTTP
Códigos de estado HTTP
Referencias Referencias
Recopilación
Conclusión
Clone this wiki locally