PHP es un lenguaje en el que el tipo de datos asociado a una variable
no es declarado estrictamente (es decir, un lenguaje libremente tipeado),
pero en PHP 5 es posible el aludir al tipo de objeto que se espera como
parámetro en un método o función.
<?php
abstract class Combustible {
abstract function usar();
}
class Kerosene extends Combustible {
function usar() {
return "Glub, glub, glub!";
}
}
class Gasolina extends Combustible {
function usar() {
return "Tink, tink, tink!";
}
}
class Cocina {
function llenar(Kerosene $comb) {
echo 'cocina: '.$comb->usar();
}
}
class Carcocha {
function llenar(Combustible $comb) {
echo 'carcocha: '.$comb->usar();
}
}
$kero = new Kerosene();
$gas = new Gasolina();
$combi = new Carcocha();
$coci = new Cocina();
// no hay problema
$combi->llenar($kero);
$combi->llenar($gas);
$coci->llenar($kero);
// la línea siguiente generaria un error
$coci->llenar($gas);
?>
... ejecutando esto para mostrar el error
carcocha: Glub, glub, glub carcocha: Tink, tink, tink cocina: Glub, glub, glub Fatal error: Argument 1 must be an instance of Kerosene in typehinting.php on line 19