Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não consigo chamar o construtor pelo método parent::

    nome do arquivo (conta.php)

insira seu código aqui

<?php 
    class conta{
        private $titular;
        private $saldo = 0;
        public function __construct(titular $titular){
            $this->titular = $titular;
        }
        //Opereções
        public function depositar(float $valor){
           if($valor < 0){
                echo 'valor invalido';
                exit();
            }
            $this->saldo += $valor;
        }
        public function sacar(float $valor){
            if($valor < 0 || $valor > $this->saldo){
                echo 'valor invalido';
                exit();
            }
            $this->saldo -= $valor;
        }
        public function transferir(conta $conta, float $valor){
           if($valor > $this->saldo || $valor < 0){
                echo 'valor invalido';
                exit();          
            }
            $this->sacar($valor);
            $conta->depositar($valor);
        }
        //mostrar valores
        //saldo
        public function mostrarSaldo(){
            return $this->saldo;
        }
        //cpf
       public function mostrarCpf(){
            return $this->titular->mostrarCpf();
        }
       //endereco
        public function mostrarCidade(){
            return $this->titular->mostrarCidade();
        } 
        public function mostrarBairro(){
            return $this->titular->mostrarBairro();
        }
       public function mostrarRua(){
            return $this->titular->mostrarRua();
        }
        public function mostrarNumero(){
            return $this->titular->mostrarNumero();
        }
        //pessoa
        public function mostrarNome(){
            return $this->titular->mostrarNome();
        }
        public function mostrarIdade(){
            return $this->titular->mostrarIdade();
        }
    }
?>
nome do arquivo (titular.php)
<?php
    class titular{
        private $pessoa;
        public function __construct(pessoa $pessoa){
            $this->pessoa = $pessoa;
        }
        //cpf
        public function mostrarCpf(){
           return $this->pessoa->mostrarCpf();
        }
        //pessoa
        public function mostrarNome(){
            return $this->pessoa->mostrarNome();
        }
        public function mostrarIdade(){
            return $this->pessoa->mostrarIdade();
       }
        //endereco
        public function mostrarCidade(){
            return $this->pessoa->mostrarCidade();
        }
        public function mostrarBairro(){
            return $this->pessoa->mostrarBairro();
        }
        public function mostrarRua(){
            return $this->pessoa->mostrarRua();
        }
        public function mostrarNumero(){
            return $this->pessoa->mostrarNumero();
        }
    }
?>
nome do arquivo(cpf.php)
<?php 
    class cpf{
        private $cpf;
        public function __construct(string $cpf){
            if(strlen($cpf) != 14){
                echo 'cpf invalido';
                exit();
            }
            $this->cpf = $cpf;
        }
        public function mostrarCpf(){
            return $this->cpf;
        }
    }
?>
nome do arquivo(endereco.php)
<?php
    class  endereco{
        private $cidade;
        private $bairro;
        private $rua;
        private $numero;
        public function __construct(string $cidade, string $bairro, string $rua, string $numero){
            $this->cidade = $cidade;
            $this->bairro = $bairro;
            $this->rua =  $rua;
            $this->numero = $numero;
        }
        public function mostrarCidade(){
            return $this->cidade;
        }
        public function mostrarBairro(){
            return $this->bairro;
        }
        public function mostrarRua(){
            return $this->rua;
        }
        public function mostrarNumero(){
            return $this->numero;
        }
    } 
?>
nome do arquivo(pessoa.php)
<?php
   class pessoa{
        private $nome;
        private $idade;
        private $endereco;
        private $cpf;
        public function __construct(string $nome, float $idade,endereco $endereco, cpf $cpf){
            $this->nome = $nome;
            $this->idade = $idade;
            parent::__construct($endereco, $cpf);
        }
        public function mostrarNome(){
           return $this->nome;
        }
        public function mostrarIdade(){
            return $this->idade;
        }
        //cpf
        public function mostrarCpf(){
            return $this->cpf->mostrarCpf();
        }
        //endereco
        public function mostrarCidade(){
            return $this->endereco->mostrarCidade();

        }

Não consigo enviar mais códigos, mas só falta o arquivo de gerar dados.

3 respostas

Phelipe, sua classe pessoa não herda de nenhuma outra classe. Quem seria parent nesse caso?

PS.: No mundo PHP é comum termos as classes começando com letra maiúscula (Pessoa, Conta, etc.)

Obrigado pela dica de usar a primeira letra do nome da classe maiúscula, os parents no caso seriam as classes Cpf e Endereco.

solução!

Phelipe, parent é a classe base da qual você herdou. Acho que os conceitos estão meio borrados aí ainda. Vamos por partes...

  1. Cpf e Endereço são propriedades da classe Pessoa. Ela não herda deles, ela apenas os possui, entende?
  2. Se você os recebeu por parâmetro, significa que eles já foram construídos. Em outras palavras, seus construtores já foram invocados.

Recomendo fortemente dar uma revisada no primeiro treinamento de OO e depois nesse pra fixar esses conceitos. :-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software