O PHP 8.1 trouxe uma série de melhorias e recursos emocionantes para os desenvolvedores, e um dos recursos mais notáveis é a capacidade de usar propriedades somente leitura na linguagem. Essa adição é um marco importante, pois permite aprimorar a confiabilidade de seu código. Neste artigo, vamos explorar o que são propriedades somente leitura, como utilizá-las e quais precauções tomar ao implementá-las.
Introdução às Propriedades Somente Leitura
Propriedades somente leitura são uma adição bem-vinda ao PHP 8.1, que permite que você defina propriedades em suas classes que não podem ser modificadas após sua inicialização. Isso é particularmente útil quando você deseja garantir que determinados valores permaneçam imutáveis durante a vida útil de um objeto. Vamos dar uma olhada em como usar essa funcionalidade com alguns exemplos práticos.
Curso PHP - Fundamentos
Conhecer o cursoExemplo de Uso de Propriedades Somente Leitura
Aqui está um exemplo simples de como declarar e utilizar uma propriedade somente leitura em uma classe PHP:
<?php
class Pessoa
{
/*
* Para declarar uma propriedade como somente leitura
* usamos a palavra reservada readonly
*/
public readonly string $nome;
/*
* Podemos atribuir o valor inicial de uma propriedade readonly
* usando o construtor ou outro método
*/
public function __construct(string $nome)
{
$this->nome = $nome;
}
}
// Define o valor inicial da propriedade readonly nome
$maria = new Pessoa('Maria');
echo $maria->nome; // Maria
// Lança um erro ao tentar modificar uma propriedade readonly
$maria->nome = 'Maria';
No exemplo acima, a propriedade $nome
da classe Pessoa
é declarada como somente leitura usando a palavra-chave readonly
. Ela só pode ser inicializada através do construtor da classe, e qualquer tentativa de modificá-la após a inicialização resultará em um erro.
Curso PHP Avançado
Conhecer o cursoPrecauções ao Utilizar Propriedades Somente Leitura
Embora as propriedades somente leitura sejam uma adição poderosa, é importante ter cuidado ao utilizá-las. Aqui estão algumas precauções a serem observadas:
Cuidado 1: Defina o Tipo
É necessário definir o tipo de uma propriedade somente leitura. Não é permitido declarar uma propriedade somente leitura sem especificar seu tipo, pois isso resultará em um erro fatal.
<?php
/*
* CUIDADO 1 AO UTILIZAR READONLY -> É NECESSÁRIO DEFINIR O TIPO
*/
class Pessoa
{
/*
* Não é permitido declarar uma propriedade readonly
* sem definir o seu tipo, isso lançará um fatal error
*/
public readonly $nome;
}
Cuidado 2: Não Inicialize no Escopo Global
As propriedades somente leitura não podem ser inicializadas no escopo global. Elas devem ser inicializadas usando o construtor da classe ou outros métodos apropriados.
<?php
/*
* CUIDADO 2 AO UTILIZAR READONLY -> NÃO PODE INICIALIZAR NO ESCOPO GLOBAL
*/
class Pessoa
{
public readonly string $nome;
}
$maria = new Pessoa;
// A inicialização não pode ser feita usando o escopo global
// deve ser feita usando o construtor ou outro método
$maria->nome = 'Maria';
Curso PHP - Recursos essenciais
Conhecer o cursoCuidado 3: Não Use Valor Padrão na Declaração
Propriedades somente leitura não podem ter um valor padrão definido na declaração da classe. Para definir um valor padrão, você deve usar uma constante.
<?php
/*
* CUIDADO 3 AO UTILIZAR READONLY -> NÃO USAR VALOR PADRÃO NA DECLARAÇÃO
*/
class Pessoa
{
/*
* A propriedade readonly não pode ter um valor padrão
* para isso devemos usar uma constante
*/
public readonly string $nome = 'Maria';
}
Dicas Bônus
É possível declarar propriedades somente leitura diretamente no construtor da classe, o que pode tornar seu código mais conciso.
<?php
/*
* DICA BÔNUS 1 -> DECLARAÇÃO DAS PROPRIEDADES READONLY NO CONSTRUTOR
*/
class Pessoa
{
/*
* É possível declarar propriedades readonly
* diretamente no construtor da classe
*/
public function __construct(
public readonly string $nome
) {}
}
$maria = new Pessoa('Maria');
A partir da versão 8.2 do PHP, se todas as propriedades de uma classe forem somente leitura, é possível declará-la diretamente como somente leitura.
<?php
/*
* DICA BÔNUS 2 -> CLASSE READONLY
*
* A partir da versão 8.2 do PHP, se todas as propriedades
* de uma classe forem somente leitura é possível declarar
* diretamente na definição dela.
*/
readonly class Pessoa
{
public string $propriedadeReadonly1;
public string $propriedadeReadonly2;
public string $propriedadeReadonly1N;
}
Curso PHP - Gerenciador de dependências Composer
Conhecer o cursoConclusão
As propriedades somente leitura são uma adição valiosa ao PHP 8.1, permitindo que você crie código mais robusto e seguro. No entanto, é fundamental entender suas limitações e precauções ao usá-las. Com essas dicas, você está pronto para aproveitar ao máximo esse recurso e melhorar a confiabilidade de seus projetos PHP.
Se você deseja explorar ainda mais as novidades do PHP 8.1 e 8.2, não deixe de conferir nosso curso “PHP - Novidades do PHP 8.1 e 8.2”, o curso possui 01h12 de vídeos e ao termino do curso você terá acesso à um certificado de 4 horas.
Veja quais são os tópicos abordados durante o curso PHP - Novidades do PHP 8.1 e 8.2:
- O que são enums e como trabalhar com eles;
- Como trabalhar com propriedades e classes readonly;
- A utilização de intersecção de tipos e como usar em conjunto com união de tipos;
- Novos tipos: never, null, true e false;
- Os novos detalhes para trabalhar com constantes.