Rogério Lino

Web development and tips

PHP: 5.5 New Features

A versão 5.5 do PHP foi lançada no mês passado, e trouxe algumas funcionalidades relevantes. Entre elas, seguem abaixo as mais interessantes (pelo menos para mim):

Generators

Com o Generators você pode iterar com um dado dentro de uma função sem a necessidade de criar um array para ser retornado.

1
2
3
4
5
6
7
8
9
10
function numerosInteiros($minimo, $maximo) {
    for ($i = $minimo; $i <= $maximo; $i++) {
        // a keyword yield "libera" a variável $i para a iteração (sem sair/retornar da/a função)
        yield $i;
    }
}

for (numerosInteiros(1, 10) as $numero) {
    echo "$numero ";
}

Ou um exemplo do próprio site php.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function xrange($start, $limit, $step = 1) {
    if ($start < $limit) {
        if ($step <= 0) {
            throw new LogicException('Step must be +ve');
        }

        for ($i = $start; $i <= $limit; $i += $step) {
            yield $i;
        }
    } else {
        if ($step >= 0) {
            throw new LogicException('Step must be -ve');
        }

        for ($i = $start; $i >= $limit; $i += $step) {
            yield $i;
        }
    }
}

/*
 * Note that both range() and xrange() result in the same
 * output below.
 */

echo 'Single digit odd numbers from range():  ';
foreach (range(1, 9, 2) as $number) {
    echo "$number ";
}

Repare que não há necessidade de criar um array, populá-lo, retorná-lo, e só depois iterá-lo para imprimir os valores.

Finally

Mesmo já possuindo a bastante tempo o bloco try/catch, só agora a partir da versão 5.5 foi introduzida a keyword finally. No qual você define um bloco para ser executado de qualquer maneira (mesmo que caia no catch).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function divide($a, $b) {
    if ($b === 0) {
        throw new Exception('Divisão por zero');
    }
    return $a / $b;
}

try {
    echo '10 / 2 = ' . divide(10, 2);
    echo '2 / 0 = ' . divide(2, 0);
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    echo 'Término das operações';
}

::class

Agora é possível resolver o nome da classe apenas através de MinhaClass::class.

1
2
3
4
5
6
7
<?php
namespace NS {
    class ClassName {
    }
    echo ClassName::class;
}
?>

empty()

Agora é possível passar expressões para a função empty() e não mais apenas variáveis.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function always_false() {
    return false;
}

if (empty(always_false())) {
    echo "This will be printed.\n";
}

if (empty(true)) {
    echo "This will not be printed.\n";
}
?>

Veja mais

Para saber mais sobre a nova versão acesse os links abaixo:

http://www.php.net/releases/5_5_0.php http://br2.php.net/manual/en/migration55.php

E o php.net também lançou sua versão nova (ainda em beta). Clique aqui para abrir a versão beta.

Comments