Na nova versão, agora é suportado alguns tipos de expressões de dados primários envolvendo tipos numéricos, strings e constantes no contexto onde antigamente o PHP aceitava somente valores estáticos, como no caso de definições de constantes. Abaixo um exemplo
const UM = 1; const DOIS = UM * 2; class C { const TRES = TWO + 1; const UM_TERCO = UM / self::TRES; const SENTENCA = 'O valor de TRES é '.self::TRES; public function f($a = UM + self::TRES) { return $a; } } //Será apresentado o valor 4 echo (new C)->f()."\n"; //Será apresentado a seguinte saída: "O valor de TRES é 3" echo C::SENTENCA;
Outro novo recurso desta nova versão é a introdução de funções com argumentos variáveis definidos para serem recebidos por um dado argumento com o uso da simbologia ‘…’, conforme abaixo exemplificado:
function f($req, $opt = null, ...$params) { //$params será um array contendo os argumentos restantes. printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } //A saída da função será req: 1; $opt: 0; number of params: 0 f(1); //A saída da função será $req: 1; $opt: 2; number of params: 0 f(1, 2); //A saída da função será $req: 1; $opt: 2; number of params: 1 f(1, 2, 3); //A saída da função será $req: 1; $opt: 2; number of params: 2 f(1, 2, 3, 4); //A saída da função será $req: 1; $opt: 2; number of params: 3 f(1, 2, 3, 4, 5);
Um outro possível uso para o operador ‘…’ é preencher o restante de uma lista de argumento de função, conforme exemplo abaixo:
<?php function add($a, $b, $c) { return $a + $b + $c; } function op($a, $b, $c) { return $a + $b * $c; } $operators = [2, 3]; //Será apresentado 6 como resultado echo add(1, ...$operators); //Será apresentado 7 como resultado echo op(1, ...$operators);