Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

propriedades da classe

Boa noite, ocorreu algo inesperado enquanto testava o código e não consegui entender como isso foi permitido pelo PHP. Segue o código e o resultado, por favor tente explicar porque o PHP permitiu tal ocorrência.

CÓDIGO

<?php

class CriarConta
{
    public string $cpf;
    public string $correntista;
    public float $saldo;
}

?>

RESULTADO

php -a
require('conta.php');
php > $conta = new CriarConta();
php > $conta->cpf = '123456789-20';
php > $conta->correntinas = 'eduardo';
php > $conta->saldo = 1300;
php > var_dump($conta);
object(CriarConta)#1 (3) {
  ["cpf"]=>
  string(12) "123456789-20"
  ["correntista"]=>
  uninitialized(string)
  ["saldo"]=>
  float(1300)
  ["correntinas"]=>
  string(7) "eduardo"
}

Observe no resultado da execução que no momento em que estava atribuindo valores às propriedades, digitei o nome de uma propriedade errado, era para ser "correntista" porém digitei "correntinas", após executei o var_dump() e tive a surpresa de encontrar uma "NOVA PROPRIEDADE" que não havia sido definida na classe.

Minha dúvida é, não deveria o PHP impedir a criação dessa propriedade?

1 resposta
solução!

Olá, Eduardo. Tudo bem?

O comportamento que você está observando é chamado de criação dinâmica de propriedades em PHP, que acontece quando você atribui um valor a uma propriedade que não foi definida na classe, o PHP cria automaticamente uma nova propriedade com o nome especificado e o tipo de dados correspondente ao valor atribuído.

Isso por ser útil quando você precisar adicionar propriedades a um objeto em tempo de execução para lidar com dados específicos de um determinado caso de uso, entretanto, pode haver situações em que a criação dinâmica de propriedades pode causar erros difíceis de depurar.

Mas eu sempre recomendo definir todas as propriedades de uma classe.

E uma curiosidade, este recurso foi marcado como obsoleto na versão mais atual do PHP (8.2), leia mais:

Espero ter ajudado, bons estudos :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓