O PHP 7 fez com que o PHP evoluísse bastante. Veja abaixo alguns recursos interessantes que todo programador PHP deve conhecer.
1. Operador de coalescência nula
Null coalescing operator
Agora, ao invés de escrever:$name = isset( $_COOKIE['name'] ) ? $_COOKIE['name'] : 'John Doe';
é possível escrever:
/**
* Old way.
*/
//echo isset( $_COOKIE['name'] ) ? $_COOKIE['name'] : 'John Doe';
/**
* New way.
*/
$name = $_COOKIE['name'] ?? 'John Doe';
// Outputs 'John Doe'.
echo $name;
$_COOKIE['name'] = 'Pedro';
// Outputs 'Pedro'.
echo $_COOKIE['name'] ?? 'John Doe';
Essa sintaxe é uma alternativa à função
isset
, e não se comporta da mesma maneira como a funçãoempty
. Ou seja, no código acima se$_COOKIE['name']
fosse0
ou uma string vazia, então, seria impresso na tela o0
ou a string vazia.
E o operador de coalescência nula deve ser escrito em uma única linha e pode ser usado múltiplas vezes, em cadeia:
// Outputs 'Content-Type: text/html; charset=utf-8'.
echo $email['headers']['content-type'] ?? $default['headers']['content-type'] ?? 'Content-Type: text/html; charset=utf-8';
2. Classes anônimas
Anonymous classes
Veja abaixo um exemplo de como é possível escrever uma Classe anônima pra validar, digamos, de uma forma mais elegante um formulário, mas sem ter que criar um arquivo exclusivo para a Classe:
$data = $_POST ?? [];
$form_validation = new class( $data ) {
public $is_submission = true;
private $data;
public function __construct( $data ) {
if ( ! $data ) {
$this->is_submission = false;
return;
}
$this->data = $data;
}
public function validate() {
$data = $this->data;
$required = [
'name',
'email',
];
foreach ( $data as $key => $value ) {
unset( $required[ $key ] );
}
$missing_field = $required[0] ?? '';
if ( $missing_field ) {
throw new Exception( "The field $missing_field is missing." );
}
}
};
try {
if ( $form_validation->is_submission ) {
$form_validation->validate();
}
} catch ( Exception $e ) {
var_dump( $e->getMessage() );
}
3. Declaração do tipo retornado
Return type declarations
O exemplo de código abaixo declara a função get_query
que por definição deve retornar uma instância da classe WP_Query
.
O caractere ?
é usado para definir, também, que a função pode retornar null
(PHP 7.1+).
O uso desse recurso pode ser útil quando, por exemplo:
- Mesmo sem utilizar PHPDoc você quer que as IDEs façam auto complete. No código abaixo o PhpStorm entenderia que a variável
$query
é uma instância deWP_Query
apenas por conta do uso da sintaxe de Return type declarations. - Você quer imprimir erros quando a função não retornar o tipo que foi definido.
/**
* @link https://www.php.net/manual/en/control-structures.declare.php
*/
declare( strict_types=1 );
function get_query(): ?WP_Query {
global $wp_query;
if ( $wp_query instanceof WP_Query ) {
return $wp_query;
}
return null;
}