Property Hooks estão chegando ao PHP 8.4!

Property Hooks estão chegando ao PHP 8.4!

Um dos recursos mais discutidos do PHP 8.4 são os Property Hooks. Os ganchos de propriedade nos permitem juntar um comportamento específico a uma única propriedade, ao mesmo tempo que permitem que esse comportamento não interfira nos aspectos existentes do PHP.
Isso será uma viradela de jogo para nós, desenvolvedores de PHP. Neste item, discutiremos porquê usar os ganchos de propriedades do PHP.



O que são ganchos de propriedade PHP?

Em um nível superior, os ganchos de propriedade permitem juntar lógica personalizada diretamente às propriedades da classe. Isso significa que você pode interagir com propriedades porquê $user->fullName porquê se fosse um getter ou
função setter sem precisar de métodos separados porquê $user->getFullName() ou $user->setFullName().

Definimos ganchos de propriedade definindo um set e get operação que será executada ao configurar ou obter uma propriedade.

Acho que esta seção do RFC para ganchos de propriedade ajuda a ilustrar o caso de uso de ganchos de propriedade.

Um caso de uso principal para ganchos é, na verdade, não usá-los, mas manter a capacidade de fazê-lo no horizonte, caso seja necessário. Em privado, os desenvolvedores geralmente implementam métodos getFoo/setFoo em uma propriedade não porque sejam necessários, mas porque podem se tornar necessários em um horizonte hipotético, e mudar de uma propriedade para um método nesse ponto se torna uma mudança de API.

Criando um gancho “get”

O get hook é usado para definir o que acontece quando uma propriedade é lida.

Por exemplo, se tivermos um User classe onde rastreamos o nome e o sobrenome do usuário, mas precisamos obter rapidamente seu “nome completo”. Podemos definir a primeira e a última propriedades usando a promoção da propriedade do construtor e logo definir um fullName imóvel que terá get gancho de propriedade. Portanto podemos facilmente gerar o fullName.

Nota: peguei isso da RFC e modifiquei um pouco, pois é um ótimo exemplo!

 "{$this->first} {$this->last}";
    }
}

$user = new User("Scott", "Keck-Warren");
// output: 
// Scott Keck-Warren
echo $user->fullName, PHP_EOL;

Criando um gancho “conjunto”

O set hook é usado para definir o que acontece quando atribuímos uma propriedade.

Se voltarmos ao nosso User classe, podemos juntar umset gancho para o nosso fullName propriedade que iráexplode o valor que passamos para ele.

Sua visita nos ajuda a continuar oferecendo o melhor para você! with arbitrary logic.
       Sua visita nos ajuda a continuar oferecendo o melhor para você! set { 
            [$this-?>first, $this->last] = explode(" ", $value, 2);
        }
    }
}


$user = new User("Scott", "Keck-Warren");
$user->fullName = "Joe Keck-Warren";
// output:
// Joe
// Keck-Warren
echo $user->first, PHP_EOL;
echo $user->last, PHP_EOL;

Readonly eWriteonly Propriedades

Uma das características interessantes dos ganchos de propriedade é que não precisamos definir tanto o get e set operações para que possamos fabricar alguns comportamentos interessantes.

Se definirmos unicamente o get gancho de propriedade, criaremos uma propriedade somente leitura.

 "{$this->first} {$this->last}";
    }
}

$user = new User("Scott", "Keck-Warren");
// Uncaught Error: Property User::$fullName is read-only in /app/test.php:13
$user->fullName = "Junk Value";

Se definirmos unicamente o set gancho de propriedade, criaremos uma propriedade somente gravação.

first, $this->last] = explode(" ", $value, 2);
        }
    }
}


$user = new User("Scott", "Keck-Warren");
// output: 
// Property User::$fullName is write-only
echo $user->fullName, PHP_EOL;

A incrível emprego disso é que podemos usá-lo para fabricar uma propriedade que criptografa ou faz hash de um valor, mantendo o valor hash Sua visita nos ajuda a continuar oferecendo o melhor para você! externamente, tornando-o privado.

hashedPassword = password_hash($value, PASSWORD_DEFAULT);
        }
    }

    private string $hashedPassword;
}


$user = new User();
$user->password = "CorrectHorseBatteryStaple";
// Uncaught Error: Cannot access private property
echo $user->hashedPassword, PHP_EOL;
// Uncaught Error: Property User::$password is write-only
echo $user->password, PHP_EOL;

Uma das discussões sobre isso on-line é que isso facilita a geração de código “confuso” porque, embora esperemos que a propriedade unicamente defina o valor, ela está fazendo um tanto nos bastidores. Isso não é
dissemelhante de ter um setPassword() isso faz a mesma coisa.

Visibilidade Assimétrica

Outro recurso adicionado ao PHP 8.4 porquê segmento da funcionalidade de ganchos de propriedade é a capacidade de definir propriedades que possuem Visibilidade Assimétrica (https://wiki.php.net/rfc/ametric-visibility-v2). Isso significa que podemos definir uma propriedade que pode ser “obtida” publicamente, mas só pode ser “definida” pela classe (private) ou seus filhos (protected).

Fazemos isso declarando a propriedade porquê public porquê normal, mas depois adicionando private(set) ou protected(set) antes de digitarem porquê o código inferior. Agora receberemos um erro se tentarmos acessá-lo.

hashedPassword = password_hash("CorrectHorseBatteryStaple", PASSWORD_DEFAULT);

Agora podemos definir uma classe filha que pode modificar a propriedade.

class StandardUser extends User 
{
    public function setHashedPassword(string $value): void 
    {
        $this->hashedPassword = password_hash($value, PASSWORD_DEFAULT);
    }
}

$user = new StandardUser();
$user->setHashedPassword("CorrectHorseBatteryStaple");

Idealmente, a classe filha entende porquê mourejar “corretamente” com isso, para que não atrapalhe o que os pais estão fazendo. É realmente uma soma incrível;

Interfaces

Outra funcionalidade que estamos obtendo com ganchos de propriedade é a capacidade de definir ganchos de propriedade dentro de nossas interfaces para que nossas classes sejam forçadas a implementá-los.

O que é realmente poderoso é que podemos definir propriedades dentro de nossa interface porquê readonly incluindo{ get; } depois ou leia e escreva usando{ get; set;} logo podemos usar a promoção da propriedade do construtor para definir a propriedade.

O que você precisa saber

  1. Property hooks são um recurso adicionado ao PHP 8.4
  2. Os ganchos de propriedade nos permitem “substituir” o padrão get e set
    operações em propriedades
  3. Defina propriedades com visibilidade assimétrica
  4. Também pode definir propriedades em interfaces

Tags:

Crédito: Manadeira Original

Adriano Pina

Adriano Pina

Análise de Sistemas | SEO e Google Ads | Fundador da Loja Script PHP Aqui & Marca Shoslh de tecnologia

Especialista em transformar ideias em soluções digitais e acelerar o crescimento online.

Deixe um comentário

Tem perguntas? Nos envia sua mensagem 24/7!

(17) 99100-0874

Endereço & Contato

Centro, Interior de São Paulo
E-mail: [email protected]

Links Úteis
BAIXAR APP | SCRIPT PHP AQUI
Certificados
0
    0
    Seu carrinho
    Seu carrinho está vazio

    Usamos cookies para garantir que oferecemos a melhor experiência em nosso site. 

       

    X

    Clique em um de nossos representantes abaixo para conversar no WhatsApp ou envie um email para: 📧 [email protected]

    Precisa de ajuda fale conosco?