Anderson Danilo

Desenvolvimento para a nova web

5 Funcionalidades Interessantes Do PHP

| Comments

Olá, neste artigo vou exemplificar o uso de 5 funcionalidades interessantes do PHP.

Vamos a primeira delas:

1. Indução de tipo

Se você veio de uma linguagem com tipagem estática, você com certeza já sentiu falta de ter certeza que nenhum programador vai passar o tipo errado.

Embora o costume das linguagens de tipagem dinâmica seja favorecer a documentação e o “duck typing”, a tipagem estática não deixa de ser interessante.

Esta funcionalidade está presente desde a versão 5.3 para classes, e da versão 7 para tipos primários, exemplo:

1
2
3
function formatDate(DateTime $date, $format='d/m/Y') {
    return $date->format($format);
}

Neste exemplo, se você enviar qualquer argumento que não seja descendente da classe DateTime, o php vai lançar um erro fatal.

Saiba mais em: http://php.net/manual/pt_BR/language.oop5.typehinting.php

2. Return no include

Suponhamos que você tenha 2 arquivos, principal.php e incluso.php, você pode fazer isso:

incluso.php
1
2
3
return array(
    'teste' => 'funcionou'
);
principal.php
1
2
$dados = include 'incluso.php';
var_dump($dados['teste']); // vai resultar "Funcionou!!"

Nos exemplos da documentação do PHP você pode aprender mais: http://php.net/manual/pt_BR/function.include.php

3. Operador binário

Você conhece o operador ternário? como abaixo:

1
$periodo = $hora > 12 ? 'tarde' : 'manhã';

Porém, a partir da versão 5.3 você pode usar o que foi chamado de operador binário, exemplo:

1
$tipo = $variavel1 ?: $variavel2;

Neste caso se a $variavel1 for vazia a $variavel2 é usada.

4. Metaprogramação: variável por nome

Como chamar uma variável pelo seu nome? dessa forma parece simples, mas se você tem um nome que pode variar? você pode chamar como “string” da seguinte forma:

1
2
3
$nome = 'Teste';
$variavel = 'nome';
echo $$variavel; // 'Teste'

O mesmo vale para nome de funções, métodos ou classes.

5. Late Static Binding

Se você já precisou trabalhar com herença de classes estáticas você provavelmente já enfrentou o seguinte problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Pessoa1Static
{
    static $nome = 'Teste1';

    public function static dizerNome()
    {
        echo 'Meu nome é '.self::$nome;
    }
}

class Pessoa2Static extends Pessoa1Static
{
    static $nome = 'Teste2';
}

Pessoa2Static::dizerNome(); // 'Teste1'

Como pode ser observado, esperavamos que a classe Pessoa2Static referencia-se suas próprias váriaveis estáticas nos métodos herdados, porém o mesmo não acontece.

Para resolver isso você pode usar “static::” ao invés de “self::”

http://php.net/manual/pt_BR/language.oop5.late-static-bindings.php

Comments