robsonvleite / datalayer

The data layer is a persistent abstraction component of your database that PDO (O data layer é um componente para abstração de persistência no seu banco de dados que usa PDO com prepared statements)
https://www.upinside.com.br
MIT License
144 stars 53 forks source link

fix Typed static property DataLayer Connect instance #60

Closed igorpsantos closed 1 year ago

igorpsantos commented 2 years ago

Fala Robson, tudo bem?

Estava acompanhando a sua Aula no youtube do PHP TIPS e ao seguir as etapas encontrei o seguinte problema:

Fatal error: Uncaught Error: Typed static property CoffeeCode\DataLayer\Connect::$instance must not be accessed before initialization in C:\Users\igor1\Documents\datalayer\src\Connect.php:42 Stack trace: #0 C:\Users\igor1\Documents\datalayer\example\pdo_example.php(11): CoffeeCode\DataLayer\Connect::getInstance() {main} thrown in C:\Users\igor1\Documents\datalayer\src\Connect.php on line 42

Após ocorrer esse problema durante a aula, fiz algumas pesquisas e como a partir da versão 7.4 foi implementado a declaração de tipos nas propriedades e métodos das classes, as propriedades não inicializadas tem um valor "undefined". Desta forma é possível utilizar o prefixo "?" para inicializar a proprieadade conforme o seu tipo ou null, porem como o propriedade em questão é um array foge da tipagem exigida e a solução que eu simulei foi inicializar a proprieadade $instance da classe CoffeeCode\DataLayer\Connect.php como um array vazio, conforme a imagem a seguir.

image

Com este ajuste foi possível continuar as aulas e realizar os testes necessários na biblioteca do DataLayer.

image

Um abraço.

robsonvleite commented 1 year ago

Commit incluíndo pasta vendor fica impossível de analisar. Mas pelo que vi essa correção já foi feita.