3 Recursos do PHP 7 que talvez você não conheça

Recursos do PHP 7 que talvez você não conheça

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ção empty. Ou seja, no código acima se $_COOKIE['name'] fosse 0 ou uma string vazia, então, seria impresso na tela o 0 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:

  1. 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 de WP_Query apenas por conta do uso da sintaxe de Return type declarations.
  2. 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;
}

Deixe um comentário