International PHP Conference 2015

Indução de Tipo

PHP 5 introduz Indução de Tipo. Funções podem forçar que os parâmetros sejam objetos (especificando o nome da classe no protótipo da função) ou array (a partir do PHP 5.1). Contudo, se NULL é usado como o valor padrão do parametro, ele será permitido como um argumento nas chamadas à função.

Exemplo #1 Exemplo Indução de Tipo

<?php
// Uma classe de exemplo
class MinhaClasse
{
    
/**
     * Uma função de teste
     *
     * Primeiro parâmetro deve ser um objeto do tipo OutraClasse
     */
    
public function teste(OutraClasse $outraclasse) {
        echo 
$outraclasse->var;
    }


    
/**
    * Outra função de teste
    *
    * Primeiro parâmetro deve ser um array
    */
    
public function testa_array(array $array_de_entrada) {
        
print_r($array_de_entrada);
    }
}

// Outro classe de exemplo
class OutraClasse {
    public 
$var 'Alô Mundo';
}
?>

Não satisfazer a indução de tipo resulta em erro fatal (Catchable fatal error).

<?php
// Uma instância de cada classe
$minhaclasse = new MinhaClasse;
$outraclasse = new OutraClasse;

// Erro Fatal: Argumento 1 deve ser um objeto da classe OutraClasse
$minhaclasse->teste('hello');

// Erro Fatal: Argumento 1 deve ser uma instância de OutraClasse
$foo = new stdClass;
$minhaclasse->teste($foo);

// Erro Fatal: Argumento 1 deve ser diferente de null
$minhaclasse->teste(null);

// Funciona: Imprime Alô Mundo
$minhaclasse->teste($outraclasse);

// Erro Fatal: Argumento 1 deve ser um array
$minhaclasse->testa_array('a string');

// Funciona: Imprime o array
$minhaclasse->testa_array(array('a''b''c'));
?>

Indução de tipo também funciona com funções:

<?php
// Um exemplo de classe
class MinhaClasse {
    public 
$var 'Alô Mundo';
}

/**
 * Uma função de teste
 *
 * Primeiro parâmetro deve ser um objeto do tipo MinhaClasse
 */
function MinhaFuncao (MinhaClasse $foo) {
    echo 
$foo->var;
}

// Funciona
$minhaclasse = new MinhaClasse;
MinhaFuncao($minhaclasse);
?>

Type hinting permitindo valor NULL:

<?php

/* Aceitando valor NULL value */
function test(stdClass $obj NULL) {

}

test(NULL);
test(new stdClass);

?>

Indução de tipo só pode ser usado com tipos objetos. Indução tradicional com int e string não são suportados.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top