sexta-feira, 9 de março de 2012

Indução de Tipo em PHP


Desde o PHP 5, você pode usar o tipo insinuando para especificar o tipo de dados esperado de um argumento em uma declaração da função. Quando você chamar a função, o PHP irá verificar se há ou não os argumentos são do tipo especificado. Se não, o tempo de execução vai gerar um erro e execução será interrompido.
Os tipos válidos são nomes de classe para os argumentos que recebem objetos e matriz para aqueles que recebem matrizes.
Aqui está um exemplo:

<?php
function enroll(Student $student, School $school) {
echo "Enrolling " . $student->name . " in " . $school->name;
}

Ao dizer PHP exatamente que tipo de objetos a se inscrever () método espera receber, você pode garantir que os alunos estão sendo matriculados em uma escola em vez de um convento ou um 401K. Da mesma forma, você sabe que não terá qualquer paquidermes teimoso aparecendo para o primeiro dia da terceira série.

O que aconteceria se eu tentasse me inscrever no Medicare?
<?php
$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare);
Embora eu sou um estudante, o seguinte erro ocorrerá:
Erro fatal capturável: Argumento 2 passou para se inscrever () deve ser uma instância de escola, instância de determinado programa, chamado em typehint.php na linha 32 e definido no typehint.php na linha 6
Se null é usado como valor padrão para um argumento também será permitido. Aqui está um exemplo, desta vez com matrizes:

<?php
function startParty(array $guests, array $food = null) {
    // party stuff...
}
$guests = array("Susan Foreman", "Sarah Jane Smith", "Rose Tyler", "Donna Noble");
startParty($guests, null);
Haverá uma festa enquanto há convidados, com e sem comida.
Limitações da Indução
Qualquer classe definida pode ser uma dica do tipo válido, visto que o PHP não suporta a indicação de tipo para um objeto genérico. E sobre tudo o resto?

Aqui está um exemplo peculiar das limitações de tipo do PHP insinuando:
<?php
function stringTest(string $string) {
    echo $string;
}
stringTest("definitely a string");

Erro fatal capturável: Argumento 1 passou para stringTest () deve ser uma instância de string, string, chamada em typehint.php na linha 42 e definido no typehint.php na linha 39
Você não é o pensar primeiro "O que é esta loucura? Eu te dei uma instância de string, e você ainda reclamam que deve ser uma instância de string!" Está tudo bem. Acontece com o melhor de nós. Na verdade, pode ser um grande
mensagem de erro confuso à primeira vista.
stringTest () não está olhando para uma string, ela está à procura de uma instância de uma seqüência de classe. Tipos de dados escalares, tais como cordas ou valores inteiros, não são suportados no PHP tipo de dicas. Mas está tudo bem! Se você precisa gerar um erro ou lançar uma exceção quando um argumento não é um tipo escalar (como uma string ou inteiro), você pode fazer executar a validação básica para servir este propósito, usando funções como is_string () ou is_int () .

As Guerras escalares
Houve um pouco de controvérsia em relação à adição de escalar PHP tipo insinuando em PHP 5.4. Aqueles que se opõem à mudança argumentam que este apoio seria ir contra os desígnios fundamentais do PHP. PHP é considerado ser um idioma fraco digitado. Em essência, isso significa que o PHP não requer que você declare tipos de dados. Variáveis ​​ainda têm tipos de dados associados com eles, mas você pode fazer coisas radicais como a adição de uma string para um inteiro sem que isso resulte em um erro.
Em Maio de 2010 suporte para o tipo de escalar sugerindo foi adicionado ao tronco PHP. Mas por causa da resposta da comunidade esse recurso não vai fazer o seu caminho para o release 5.4.

Nenhum comentário :

Postar um comentário

Total de visualizações de página