PHP Dica de código

Dica de Código: Propriedades Somente Leitura no PHP

Descubra como utilizar as propriedades somente leitura no PHP 8.1 para criar código mais seguro e confiável.

há 8 meses 3 dias

Formação Desenvolvedor PHP
Conheça a formação em detalhes

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.

PHP - Fundamentos
Curso PHP - Fundamentos
Conhecer o curso

Exemplo 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.

PHP Avançado
Curso PHP Avançado
Conhecer o curso

Precauçõ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';

PHP - Recursos essenciais
Curso PHP - Recursos essenciais
Conhecer o curso

Cuidado 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;
}

PHP - Gerenciador de dependências Composer
Curso PHP - Gerenciador de dependências Composer
Conhecer o curso

Conclusã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.

Autor(a) do artigo

Elton Fonseca
Elton Fonseca

Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduado em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. @eltonfonsecadev

Todos os artigos

Artigos relacionados Ver todos