PHP é uma linguagem de script usada por um grande número de usuários para fins de desenvolvimento web. A última versão estável e atualizada do PHP, 8.3, foi lançada em 23.11.2023. Houve muitas inovações e mudanças desde o PHP 3.x, lançado em 2000. O PHP ainda está entre as linguagens de desenvolvimento web (web design) mais populares usadas por um público muito grande. Neste artigo, examinaremos e analisaremos as inovações e mudanças no PHP 8.3 com exemplos de código.
PHP 8.3 Principais Novos Recursos e Melhorias
Existem muitas inovações e melhorias importantes no PHP 8.3 em comparação com a versão anterior do PHP, PHP 8.2. Ao mesmo tempo, alguns recursos foram descontinuados. Examinaremos agora as inovações e melhorias uma por uma com exemplos de código.
Constantes de classe digitadas
A declaração de tipo é um recurso muito importante para desenvolvedores que aumenta a estabilidade e reduz as taxas de erros no desenvolvimento web. O recurso de declaração de tipo para propriedades em uma classe foi adicionado no PHP 7.4. Embora muitas melhorias tenham sido feitas nesse recurso em versões posteriores, ele ainda não estava disponível para constantes na classe. Com o PHP 8.3, agora é possível declarar tipos para constantes em classes.
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}Algumas declarações de tipo não são suportadas para constantes de classe.
Declarações de tipo não suportadas para constantes de classe: void, callable, never
Uma nova função: json_validate()
Ao trabalhar com dados no formato JSON (dados codificados em json), precisamos verificar se os dados recebidos são válidos antes de usá-los. Estávamos fazendo isso em versões anteriores ao PHP 8.3 usando os métodos a seguir ou semelhantes.
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}Neste exemplo antigo, ao validar dados JSON, o PHP pode consumir memória significativa, dependendo do tamanho dos dados. No PHP 8.3, foi adicionada uma nova função PHP que cria uma solução rápida orientada para desempenho: json_validate(). Exemplificamos o cenário de uso desta função abaixo.
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}Um novo recurso: #[Substituir]
Ao implementar interfaces em PHP, fornecemos funcionalidades detalhadas para os métodos na interface. Ao criar uma instância de uma classe, podemos substituir um método pai criando uma versão alternativa com o mesmo nome e assinatura compatível. Isso pode causar grandes problemas no software. Resumindo, o problema é que pensamos que substituímos o método principal como resultado de um pequeno erro de digitação esquecido.
O recurso #[Override] do PHP 8.3 fornece uma solução para esse problema. Agora vamos ver isso no exemplo.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}Clonagem profunda de propriedades somente leitura
O PHP introduziu a possibilidade de declarar propriedades de classes individuais como somente leitura no PHP 8.1 e atribuí-las a toda a classe no PHP 8.2. Porém, a maioria dos desenvolvedores web pensava que as limitações impostas ao trabalhar com classes contendo tais recursos impediam a praticidade na lógica de programação.
Para mudar isso RFC Duas recomendações principais foram feitas:
somente leitura
readonlypermitindo aulas que não podem ser estendidasreadonlypermitindo que recursos sejam reiniciados durante a clonagem
A segunda sugestão foi incluída no PHP 8.3. Esta nova abordagem adicionada ao PHP 8.3 readonly instâncias de uma classe com propriedadesreadonly propriedades) __clone Permite que seja reiniciado com seu método mágico.
Este exemplo de código da RFC pode nos ajudar a entender como esse novo método funciona:
Busca Dinâmica de Constantes de Classe e Membros Enum
Ao contrário de outros recursos do PHP, capturar constantes de classe e membros enum com nomes de variáveis é um pouco mais complicado. Antes do PHP 8.3 poderíamos fazer isso como no exemplo abaixo:
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;Agora, vamos obter os valores usando as definições de classe e enum no exemplo acima no PHP 8.3:
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;Um novo método: getBytesFromString()
Podemos dizer que este método foi o mais inesperado entre os recursos adicionados no PHP 8.3: Geração de texto aleatório usando uma coleção pré-aprovada de caracteres.
Este novo método é muito simples e claro. Damos alguns caracteres ao método como recursos e especificamos quantos deles queremos usar. Isso é tudo! Agora nosso método retornará resultados com caracteres aleatórios até atingir o comprimento especificado. Agora vamos esclarecer isso com um exemplo
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriÉ possível que a saída seja maior que o comprimento total dos caracteres que especificamos. Fizemos isso no exemplo abaixo:
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriSe todos os caracteres que damos como parâmetros forem diferentes, a probabilidade de qual deles será selecionado é igual. No entanto, podemos fazer com que mais caracteres iguais apareçam na saída adicionando mais de um caractere igual à nossa lista de caracteres suportados. Mostramos isso no próximo exemplo.
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriNovos métodos: getFloat() e nextFloat()
Nesta inovação, o PHP 8.3 introduz dois novos métodos que estendem a extensão aleatória do PHP: getFloat() e nextFloat().
Um exemplo desses métodos:
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriPequenas inovações e melhorias no PHP 8.3
Além das inovações acima, o PHP 8.3 possui dezenas de outras melhorias e inovações de pequena escala. Nós os listamos junto com seus documentos de origem na lista abaixo.
- Novos métodos para a classe DOMElement:
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode::contains() eMParentNode::replaceChildren(). - Novos métodos para a classe IntlCalendar:
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()eIntlGregorianCalendar::createFromDateTime(). - Novas funções LDAP: ldap_connect_wallet() e ldap_exop_sync().
- novo
mb_str_pad()função de string multibyte (função de string multibyte). - Novas funções POSIX:
posix_sysconf(),posix_pathconf(),posix_fpathconf()eposix_eaccess(). - Novo método:
ReflectionMethod::createFromMethodName() - Nova função de soquete:
socket_atmark(). - Novas funções de string (texto):
str_increment(),str_decrement()estream_context_set_options(). - Novo método da classe ZipArchive:
ZipArchive::getArchiveFlag(). - Nova configuração do php.ini para definir o tamanho máximo permitido da pilha:
zend.max_allowed_stack_size.
Obsoleto no PHP 8.3
A cada nova versão do PHP, algum código é marcado para descontinuação. Nunca é recomendado usar esses recursos, uma vez que eles estão completamente obsoletos. Se for usado código obsoleto, uma mensagem de erro será retornada quando o código for executado.
Lista de depreciações no PHP 8.3:
- A constante U_MULTIPLE_DECIMAL_SEPARATORS foi descontinuada.
- Mt19937
3MT_RAND_PHPA variante foi descontinuada. ReflectionClass::getStaticProperties()não pode mais ser anulável.- Configurações do PHP.ini
assert.active,assert.bail,assert.callback,assert.exceptioneassert.warningfoi descontinuado. get_class()eget_parent_class()foi descontinuado.
PHP 8.3
Neste artigo, revisamos as mudanças e inovações importantes no PHP 8.3. Para uma lista mais detalhada de todas as mudanças no PHP 8.3 registro de alterações oficial Recomendamos que você revise. Se você deseja atualizar seus códigos ou site do PHP 8.2 para o PHP 8.3, este guia pode ser útil: Guia de migração do PHP 8.3 -> https://www.php.net/manual/en/migration83.php
Se você está preocupado com as versões e migração do PHP, recomendamos dar algum tempo à nova versão para atualizar para o PHP 8.3.
Cobertura completa de PHP e JavaScript idiomas e tecnologias relacionadas como Onur Özden Web Çözümleri Programas Web Oferecemos serviços. Se você tiver alguma dúvida ou solicitação, pode entrar em contato conosco rapidamente através do botão Whatsapp no canto inferior esquerdo para obter um orçamento.



