1
resposta

ERRO no código

Alguém pode me ajudar por favor? Está dando esse 'erro' mencionado abaixo, quando aperto o botão de gravar. Redireciona para outra página e dá esse erro

Warning: Undefined property: Pessoa::$telefone in C:\xampp\htdocs\ProvaLucasSantos\CadastroPessoas.php on line 28

Fatal error: Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given in C:\xampp\htdocs\ProvaLucasSantos\DadosPessoa.php:15 Stack trace: #0 C:\xampp\htdocs\ProvaLucasSantos\DadosPessoa.php(15): implode(',', NULL) #1 C:\xampp\htdocs\ProvaLucasSantos\index.php(36): DadosPessoa->CriandoArquivo(Object(Pessoa)) #2 {main} thrown in C:\xampp\htdocs\ProvaLucasSantos\DadosPessoa.php on line 15

/*CadastroPessoas.php*/
<?php
    require_once('Contatos.php');

    class Pessoa {
        public  $nome;
        public  $cpf;
        public $telefones = array();

        public function __construct( $nome, $cpf, $telefones)
        {
            $this->nome = $nome;
            $this->cpf = $cpf;
            $this->telefones = $telefones;
        }

        public function getNome()
        {
            return $this->nome;
        }

        public function getCpf()
        {
            return $this->cpf;
        }

        public function getTelefones()
        {
            return $this->telefone;
        }

    }
/*Contatos.php*/
<?php
    class Telefones
    {
        public  $telefones;
        public  $descricao;

        public function __construct($telefone,$descricao)
        {
            $this->telefone = $telefone;
            $this->descricao = $descricao;
        }

        public function getTelefones() 
        {
            return $this->telefone;
        }

        public function getDescricao()
        {
            return $this->descricao;
        }

        public function toString(){
            return "$this->telefone - $this->descricao";
          }
    }
/*DadosPessoa.php*/
<?php
    require_once('CadastroPessoas.php');
    require_once('Contatos.php');

    class DadosPessoa
    {
        function __construct(){


        }

            public function CriandoArquivo(Pessoa $pessoa)
            {
                $arquivoaberto = fopen('Projeto.txt',"a");// a é somente pra escrita; cria txt Projeto
                $celulares = implode(",", $pessoa->getTelefones()); // array pra string
                fwrite($arquivoaberto, $pessoa->getNome() . "->" . $pessoa->getCpf() . "->" . $celulares. "\n"); // escrevo no arquivo
                fclose($arquivoaberto);
            }

            public function LeArquivo(){
                $usuario = array(); // vai guardar os objetos
                $arquivoaberto=fopen('Projeto.txt',"r"); // r pra leitura
                //$arq= file('C:\xampp\htdocs\Projeto\arquivo.txt'); // salva cada linha em $arq, não vai dar certo porque puxa caminho
                while(!feof($arquivoaberto)){
                    $arq=fgets($arquivoaberto);
                    $novoarq = explode ("->", $arq); // string em vetor
                    if(!empty($arq)){
                        $nome=$novoarq[0]; // primeiro indice do vetor é sempre nome
                        $cpf=$novoarq[1]; // segundo é cpf
                        $celnovo = explode(",", $novoarq[2]); // string dos telefones em vetores
                        $usuarioNovo = new Pessoa($nome, $cpf, $celnovo);
                        $usuario[]=$usuarioNovo;
                    }

                }    
                return $usuario;
            }



    }
1 resposta

Oi Lucas, como vai?

No arquivo CadastroPessoas.php, na função getTelefones(), você está retornando $this->telefone, mas o nome da propriedade é $this->telefones. Portanto, você precisa corrigir essa linha para:

public function getTelefones()
{
    return $this->telefones;
}

No arquivo DadosPessoa.php, na função CriandoArquivo(), você está utilizando a função implode() para converter o array de telefones em uma string, mas está passando a propriedade errada. Você precisa alterar essa linha para:

$celulares = implode(",", $pessoa->getTelefones());

Além disso, no arquivo Contatos.php, você definiu a classe como Telefones, mas está utilizando Contatos no require_once do arquivo DadosPessoa.php. Você precisa corrigir essa linha para:

require_once('Telefones.php');

Após fazer essas correções, o erro deve ser resolvido. Verifique se o código está funcionando corretamente.

Espero ter ajudado!

Caso tenha dúvidas, fico à disposição.

Abraços e bons estudos!