PHP 7 - Guia Rápido
O que é PHP 7?
PHP 7 é um grande lançamento da linguagem de programação PHP e é apontado como uma revolução na maneira como os aplicativos da web podem ser desenvolvidos e entregues para dispositivos móveis para empresas e na nuvem. Este lançamento é considerado a mudança mais importante para o PHP após o lançamento do PHP 5 em 2004.
Novas características
Existem dezenas de recursos adicionados ao PHP 7, os mais significativos são mencionados abaixo -
Improved performance - Tendo o código PHPNG fundido no PHP7, é duas vezes mais rápido que o PHP 5.
Lower Memory Consumption - O PHP 7 otimizado utiliza menos recursos.
Scalar type declarations - Agora, os tipos de parâmetro e retorno podem ser aplicados.
Consistent 64-bit support - Suporte consistente para máquinas com arquitetura de 64 bits.
Improved Exception hierarchy - A hierarquia de exceções foi aprimorada.
Many fatal errors converted to Exceptions - O intervalo de exceções é aumentado cobrindo muitos erros fatais convertidos como exceções.
Secure random number generator - Adição de uma nova API segura de gerador de números aleatórios.
Deprecated SAPIs and extensions removed - Vários SAPIs e extensões antigos e sem suporte foram removidos da versão mais recente.
The null coalescing operator (??) - Novo operador de coalescência nulo adicionado.
Return and Scalar Type Declarations - Suporte para tipo de retorno e tipo de parâmetro adicionado.
Anonymous Classes - Suporte para anônimo adicionado.
Zero cost asserts - Suporte para assert custo zero adicionado.
O PHP 7 usa o novo Zend Engine 3.0 para melhorar o desempenho do aplicativo quase duas vezes e o consumo de memória 50% melhor do que o PHP 5.6. Ele permite atender a mais usuários simultâneos sem a necessidade de nenhum hardware adicional. O PHP 7 foi projetado e refeito considerando as cargas de trabalho de hoje.
De acordo com a equipe Zend , as ilustrações a seguir mostram a comparação de desempenho do PHP 7 vs PHP 5.6 e HHVM 3.7 em aplicativos populares baseados em PHP.
Magento 1.9
O PHP 7 prova ser duas vezes mais rápido, em comparação com o PHP 5.6, durante a execução de transações Magento.
Drupal 7
O PHP 7 prova ser duas vezes mais rápido, em comparação com o PHP 5.6, durante a execução de transações Drupal.
Wordpress 3.6
O PHP 7 prova ser duas vezes mais rápido que o PHP 5.6 ao executar transações do Wordpress.
Comparação de Linguagens Dinâmicas
Experimente a opção online
Configuramos o ambiente de programação PHP online, para que você possa compilar e executar todos os exemplos disponíveis online. Dá a você confiança no que está lendo e permite que você verifique os programas com diferentes opções. Sinta-se à vontade para modificar qualquer exemplo e executá-lo online.
Experimente o exemplo a seguir usando nosso compilador online disponível em CodingGround.
<html> <head> <title>Online PHP Script Execution</title> </head> <body> <?php echo "<h1>Hello, PHP!</h1>"; ?> </body> </html>
Para a maioria dos exemplos dados neste tutorial, você encontrará um Try itopção nas seções de código do nosso site no canto superior direito que o levará para o compilador online. Portanto, apenas use e aproveite seu aprendizado.
Para desenvolver e executar páginas da Web em PHP, três componentes vitais precisam ser instalados em seu sistema de computador.
Web Server- O PHP funciona com praticamente todos os softwares de servidor Web, incluindo o Internet Information Server (IIS) da Microsoft, mas o mais usado é o Apache Server. Baixe o Apache gratuitamente aqui -http://httpd.apache.org/download.cgi
Database- PHP PHP funciona com praticamente todos os softwares de banco de dados, incluindo Oracle e Sybase, mas o mais comumente usado é o banco de dados MySQL. Baixe o MySQL gratuitamente aqui -http://www.mysql.com/downloads/
PHP Parser- Para processar as instruções do script PHP, um analisador deve ser instalado para gerar a saída HTML que pode ser enviada ao navegador da web. Este tutorial irá guiá-lo como instalar o analisador PHP em seu computador.
Instalação do PHP Parser
Antes de prosseguir, é importante certificar-se de que você tenha o ambiente adequado configurado em sua máquina para desenvolver seus programas da web usando PHP. Armazene o seguinte arquivo php na pasta htdocs do Apache.
phpinfo.php
<?php
phpinfo();
?>
Digite o seguinte endereço na caixa de endereço do seu navegador.
http://127.0.0.1/phpinfo.php
Se isso exibir uma página mostrando as informações relacionadas à instalação do PHP, significa que o PHP e o servidor da Web estão instalados corretamente. Caso contrário, você deve seguir o procedimento fornecido para instalar o PHP em seu computador.
Esta seção irá guiá-lo para instalar e configurar o PHP nas quatro plataformas a seguir -
Instalação de PHP em Linux ou Unix com Apache
Instalação do PHP no Mac OS X com Apache
Instalação do PHP no Windows NT / 2000 / XP com IIS
Instalação do PHP no Windows NT / 2000 / XP com Apache
Configuração Apache
Se você estiver usando o Apache como um servidor Web, esta seção o guiará para editar os arquivos de configuração do Apache.
Verifique aqui - Configuração do PHP no servidor Apache
Configuração do arquivo PHP.INI
O arquivo de configuração do PHP, php.ini, é a forma final e imediata de afetar a funcionalidade do PHP.
Verifique aqui - Configuração do arquivo PHP.INI
Configuração do Windows IIS
Para configurar o IIS em sua máquina Windows, você pode consultar o manual de referência do IIS enviado com o IIS.
No PHP 7, um novo recurso, declarações de tipo escalar, foi introduzido. A declaração de tipo escalar tem duas opções -
coercive - coercivo é o modo padrão e não precisa ser especificado.
strict - o modo estrito deve ser sugerido explicitamente.
Os seguintes tipos de parâmetros de função podem ser aplicados usando os modos acima -
- int
- float
- bool
- string
- interfaces
- array
- callable
Exemplo - Modo Coercitivo
<?php
// Coercive mode
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
Ele produz a seguinte saída do navegador -
9
Exemplo - Modo estrito
<?php
// Strict mode
declare(strict_types=1);
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
Ele produz a seguinte saída do navegador -
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
No PHP 7, um novo recurso, Return type declarationsfoi introduzido. A declaração do tipo de retorno especifica o tipo de valor que uma função deve retornar. Os seguintes tipos de tipos de retorno podem ser declarados.
- int
- float
- bool
- string
- interfaces
- array
- callable
Exemplo - Tipo de retorno válido
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value;
}
print(returnIntValue(5));
?>
Ele produz a seguinte saída do navegador -
5
Exemplo - Tipo de retorno inválido
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value + 1.0;
}
print(returnIntValue(5));
?>
Ele produz a seguinte saída do navegador -
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
No PHP 7, um novo recurso, null coalescing operator (??)foi introduzido. É usado para substituir oternaryoperação em conjunto com a função isset (). oNullcoalescing operator retorna seu primeiro operando se ele existir e não for NULL; caso contrário, ele retorna seu segundo operando.
Exemplo
<?php
// fetch the value of $_GET['user'] and returns 'not passed'
// if username is not passed
$username = $_GET['username'] ?? 'not passed';
print($username);
print("<br/>");
// Equivalent code using ternary operator
$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
print($username);
print("<br/>");
// Chaining ?? operation
$username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
print($username);
?>
Ele produz a seguinte saída do navegador -
not passed
not passed
not passed
No PHP 7, um novo recurso, operador de nave espacial foi introduzido. É usado para comparar duas expressões. Ele retorna -1, 0 ou 1 quando a primeira expressão é respectivamente menor, igual ou maior que a segunda expressão.
Exemplo
<?php
//integer comparison
print( 1 <=> 1);print("<br/>");
print( 1 <=> 2);print("<br/>");
print( 2 <=> 1);print("<br/>");
print("<br/>");
//float comparison
print( 1.5 <=> 1.5);print("<br/>");
print( 1.5 <=> 2.5);print("<br/>");
print( 2.5 <=> 1.5);print("<br/>");
print("<br/>");
//string comparison
print( "a" <=> "a");print("<br/>");
print( "a" <=> "b");print("<br/>");
print( "b" <=> "a");print("<br/>");
?>
Ele produz a seguinte saída do navegador -
0
-1
1
0
-1
1
0
-1
1
Constantes de matriz agora podem ser definidas usando o define()função. No PHP 5.6, eles só podiam ser definidos usandoconst palavra-chave.
Exemplo
<?php
//define a array using define function
define('animals', [
'dog',
'cat',
'bird'
]);
print(animals[1]);
?>
Ele produz a seguinte saída do navegador -
cat
Classes anônimas agora podem ser definidas usando nova classe. A classe anônima pode ser usada no lugar de uma definição de classe completa.
Exemplo
<?php
interface Logger {
public function log(string $msg);
}
class Application {
private $logger;
public function getLogger(): Logger {
return $this->logger;
}
public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements Logger {
public function log(string $msg) {
print($msg);
}
});
$app->getLogger()->log("My first Log Message");
?>
Ele produz a seguinte saída do navegador -
My first Log Message
Closure::call()método é adicionado como uma forma abreviada de vincular temporariamente um escopo de objeto a um encerramento e invocá-lo. É muito mais rápido em desempenho em comparação combindTo do PHP 5.6.
Exemplo - Pre PHP 7
<?php
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, 'A');
print($value());
?>
Ele produz a seguinte saída do navegador -
1
Exemplo - PHP 7
<?php
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>
Ele produz a seguinte saída do navegador -
1
PHP 7 apresenta Filtrado unserialize()função para fornecer melhor segurança ao desserializar objetos em dados não confiáveis. Isso evita possíveis injeções de código e permite que o desenvolvedor coloque na lista de permissões classes que podem ser desserializadas.
Exemplo
<?php
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 1;
$obj2 = new MyClass2();
$obj2->obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// default behaviour that accepts all classes
// second argument can be ommited.
// if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
print($data->obj1prop);
print("<br/>");
print($data2->obj2prop);
?>
Ele produz a seguinte saída do navegador -
1
2
No PHP7, um novo IntlCharclasse é adicionada, que visa expor funcionalidades adicionais da UTI. Esta classe define vários métodos estáticos e constantes, que podem ser usados para manipular caracteres Unicode. Você precisa terIntl extensão instalada antes de usar esta classe.
Exemplo
<?php
printf('%x', IntlChar::CODEPOINT_MAX);
print (IntlChar::charName('@'));
print(IntlChar::ispunct('!'));
?>
Ele produz a seguinte saída do navegador -
10ffff
COMMERCIAL AT
true
No PHP 7, a seguir, duas novas funções são introduzidas para gerar inteiros e strings criptograficamente seguros em uma plataforma cruzada.
random_bytes() - Gera bytes pseudo-aleatórios criptograficamente seguros.
random_int() - Gera inteiros pseudo-aleatórios criptograficamente seguros.
random_bytes ()
random_bytes () gera uma string de comprimento arbitrário de bytes criptográficos aleatórios que são adequados para uso criptográfico, como ao gerar sais, chaves ou vetores de inicialização.
Sintaxe
string random_bytes ( int $length )
Parâmetros
length - O comprimento da string aleatória que deve ser retornada em bytes.
Valores Retornados
Retorna uma string contendo o número solicitado de bytes aleatórios criptograficamente seguros.
Erros / exceções
Se uma fonte apropriada de aleatoriedade não puder ser encontrada, uma exceção será lançada.
Se parâmetros inválidos forem fornecidos, um TypeError será lançado.
Se um comprimento inválido de bytes for fornecido, um erro será lançado.
Exemplo
<?php
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>
Ele produz a seguinte saída do navegador -
54cc305593
random_int ()
random_int() gera inteiros criptográficos aleatórios que são adequados para uso onde os resultados imparciais são críticos.
Sintaxe
int random_int ( int $min , int $max )
Parâmetros
min - O menor valor a ser retornado, que deve ser PHP_INT_MIN ou mais alto.
max - O maior valor a ser retornado, que deve ser menor ou igual a PHP_INT_MAX.
Valores Retornados
Retorna um inteiro aleatório criptograficamente seguro no intervalo mínimo a máximo, inclusive.
Erros / exceções
Se uma fonte apropriada de aleatoriedade não puder ser encontrada, um Exception será lançado.
Se parâmetros inválidos forem fornecidos, um TypeError será lançado.
Se max for menor que min, um Error será lançado.
Exemplo
<?php
print(random_int(100, 999));
print(" ");
print(random_int(-1000, 0));
?>
Ele produz a seguinte saída do navegador -
614
-882
Expectationssão um aprimoramento compatível com versões anteriores da função assert () mais antiga. A expectativa permite asserções de custo zero no código de produção e fornece a capacidade de lançar exceções customizadas quando a asserção falha. assert () é agora uma construção de linguagem, onde o primeiro parâmetro é uma expressão em comparação a ser uma string ou booleano a ser testado.
Diretivas de configuração para assert ()
Diretriz | Valor padrão | Valores possíveis |
---|---|---|
zend.assertions | 1 | 1 - gerar e executar código (modo de desenvolvimento) 0 - gerar código, mas pular em tempo de execução -1 - não gerar código (modo de produção) |
assert.exception | 0 | 1 - lançar, quando a afirmação falhar, seja lançando o objeto fornecido como exceção ou lançando um novo AssertionError objeto se a exceção não foi fornecida. 0 - use ou gere um Throwable conforme descrito acima, mas apenas gera um aviso baseado naquele objeto ao invés de lançá-lo (compatível com o comportamento do PHP 5) |
Parâmetros
assertion- A afirmação. No PHP 5, deve ser uma string a ser avaliada ou um Booleano a ser testado. No PHP 7, também pode ser qualquer expressão que retorna um valor, que será executado e o resultado é usado para indicar se a asserção foi bem-sucedida ou falhou.
description - Uma descrição opcional que será incluída na mensagem de falha, se a asserção falhar.
exception - No PHP 7, o segundo parâmetro pode ser um Throwable objeto em vez de uma string descritiva, caso em que este é o objeto que será lançado, se a declaração falhar e o assert.exception a diretiva de configuração está habilitada.
Valores Retornados
FALSE se a afirmação for falsa, TRUE de outra forma.
Exemplo
<?php
ini_set('assert.exception', 1);
class CustomError extends AssertionError {}
assert(false, new CustomError('Custom Error Message!'));
?>
Ele produz a seguinte saída do navegador -
Fatal error: Uncaught CustomError: Custom Error Message! in...
A partir do PHP7, uma única instrução de uso pode ser usada para importar classes, funções e constantes do mesmo namespace em vez de várias instruções de uso.
Exemplo
<?php
// Before PHP 7
use com\tutorialspoint\ClassA;
use com\tutorialspoint\ClassB;
use com\tutorialspoint\ClassC as C;
use function com\tutorialspoint\fn_a;
use function com\tutorialspoint\fn_b;
use function com\tutorialspoint\fn_c;
use const com\tutorialspoint\ConstA;
use const com\tutorialspoint\ConstB;
use const com\tutorialspoint\ConstC;
// PHP 7+ code
use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
use function com\tutorialspoint\{fn_a, fn_b, fn_c};
use const com\tutorialspoint\{ConstA, ConstB, ConstC};
?>
No PHP 7, o tratamento de erros e relatórios foram alterados. Em vez de relatar erros por meio do mecanismo tradicional de relato de erros usado pelo PHP 5, agora a maioria dos erros são tratados lançando exceções de erro. Semelhante às exceções, essas exceções de erro borbulham até atingirem o primeiro bloco catch correspondente. Se não houver blocos correspondentes, um manipulador de exceção padrão instalado comset_exception_handler()será chamado. Caso não haja um manipulador de exceção padrão, a exceção será convertida em um erro fatal e será tratada como um erro tradicional.
Como a hierarquia de erro não é estendida de Exception, o código que usa blocos catch (Exception $ e) {...} para lidar com exceções não capturadas no PHP 5 não irá lidar com tais erros. Um bloco catch (Error $ e) {...} ou umset_exception_handler() handler é necessário para lidar com erros fatais.
Exemplo
<?php
class MathOperations {
protected $n = 10;
// Try to get the Division by Zero error object and display as Exception
public function doOperation(): string {
try {
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e) {
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
Ele produz a seguinte saída do navegador -
Modulo by zero
PHP 7 apresenta uma nova função intdiv(), que realiza a divisão inteira de seus operandos e retorna a divisão como int.
Exemplo
<?php
$value = intdiv(10,3);
var_dump($value);
print(" ");
print($value);
?>
Ele produz a seguinte saída do navegador -
int(3)
3
Do PHP7 +, session_start() função aceita uma série de opções para substituir as diretivas de configuração de sessão definidas em php.ini. Essas opções suportamsession.lazy_write, que está ativado por padrão e faz com que o PHP sobrescreva qualquer arquivo de sessão se os dados da sessão forem alterados.
Outra opção adicionada é read_and_close, que indica que os dados da sessão devem ser lidos e, em seguida, a sessão deve ser imediatamente encerrada sem alterações. Por exemplo, Setsession.cache_limiter como privado e defina o sinalizador para fechar a sessão imediatamente após lê-la, usando o seguinte trecho de código.
<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>
Os recursos a seguir estão obsoletos e podem ser removidos de versões futuras do PHP.
Construtores de estilo PHP 4
Construtores de estilo PHP 4 são métodos que têm o mesmo nome da classe em que são definidos, estão agora obsoletos e serão removidos no futuro. PHP 7 emitirá E_DEPRECATED se um construtor PHP 4 for o único construtor definido dentro de uma classe. As classes que implementam um método __construct () não são afetadas.
Exemplo
<?php
class A {
function A() {
print('Style Constructor');
}
}
?>
Ele produz a seguinte saída do navegador -
Deprecated: Methods with the same name as their class will not be constructors
in a future version of PHP; A has a deprecated constructor in...
Chamadas estáticas para métodos não estáticos
Chamadas estáticas para métodos não estáticos estão obsoletas e podem ser removidas no futuro.
Exemplo
<?php
class A {
function b() {
print('Non-static call');
}
}
A::b();
?>
Ele produz a seguinte saída do navegador -
Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
opção de sal password_hash ()
A opção de sal para o password_hash()função foi descontinuada para que os desenvolvedores não gerem seus próprios sais (geralmente inseguros). A própria função gera um sal criptograficamente seguro, quando nenhum sal é fornecido pelo desenvolvedor - portanto, a geração de sal personalizado não é mais necessária.
capture_session_meta opção de contexto SSL
o capture_session_metaA opção de contexto SSL foi descontinuada. Metadados SSL agora são usados por meio dostream_get_meta_data() função.
As seguintes extensões foram removidas do PHP 7 em diante -
- ereg
- mssql
- mysql
- sybase_ct
Os seguintes SAPIs foram removidos do PHP 7 em diante -
- aolserver
- apache
- apache_hooks
- apache2filter
- caudium
- continuity
- isapi
- milter
- nsapi
- phttpd
- pi3web
- roxen
- thttpd
- tux
- webjames