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

Função não é chamada

Estou tentando chamar uma função de outro arquivo, mas, mesmo eu colocando o require_once chamando o arquivo, a função dele não é chamada quando tento executar o script

Arquivo "teste1.php":

<?php
require_once 'teste2.php';

class Eu
{
    private $nome;
    private $idade;

    private $profissao;

    public function __construct(string $nome, int $idade, string $nomeProfissao, $tempoDeServico)
    {
        $this->nome=$nome;
        $this->idade=$idade;
        $this->profissao= new Profissao($nomeProfissao, $tempoDeServico);
    }

}

$pessoa= new Eu('Luiz', 21, 'programador', '1 ano'); 

print_r($pessoa);
$recupera=recuperaProfissao();

print_r($recupera);

Arquivo "teste2.php":

<?php

class Profissao 
{
    private $nomeProfissao;
    private $tempoDeServico;

    public function __construct(string $nomeProfissao, string $TempoDeServico)
    {
        $this->nomeProfissao=$nomeProfissao;
        $this->tempoDeServico=$TempoDeServico;
    }

    public function recuperaProfissao()
    {
        echo $this->nomeProfissao;
    }
}

Tive problemas com o script da aula 2 de Composição de Objetos, daí tentei fazer arquivos testes para tentar ver meu erro. Porém, me deparo com isso :) Agradeço quem puder me ajudar desde já!!

5 respostas

Boa noite Maya!

Mostra pra gente a mensagem de erro, por gentileza!

Talvez seja algum erro de path do seu arquivo!

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeBom dia! Tinha-me esquecido de mostrar o erro, perdão! Vai a imagem em anexo

Oi Maya, tudo bem?

Você escreveu $recupera=recuperaProfissao(), porém, você não definiu nenhuma função com o nome recuperaProfissao. O que você definiu foi um método recuperaProfissao dentro da classeProfissao.

Para você usar o método recuperaProfissao terá que criar uma instância (objeto) da classe Profissao.

Caso a sua dúvida tenha sido solucionada não esqueça de marcar a solução para que o tópico seja encerrado :)

Bons estudos.

Olá Diego! Eu entendi o que você quis dizer. Porém ainda tenho a seguinte duvida:

Na classe Eu, eu chamei uma instância de Profissão no construtor. Quando chamo o new Eu() coloco tanto os dados do construtor da classe Eu quanto da classe Profissao. Dessa forma eu já não estaria criando automaticamente um objeto de Profissao alocado na variável $profissao que deixei dentro da classe Eu?

solução!

Oi Maya,

O recuperaProfissao é um método da classe Profissao e não da classeEu. Na classe Eu você tem uma instância de Profissao guardada no atributo $profissao. Você deveria ter algum método na classe Eu para recuperar essa instância de Profissao, algo do tipo:

public function recuperaProfissao(): Profissao
{
    return $this->profissao;
}

E ai então fazer:

$profissao = $pessoa->recuperaProfissao();

$nomeProfissao = profissao->recuperaProfissao();

Eu indicaria mudar o nomerecuperaProfissao para recuperaNomeDaProfissao na classeProfissao, dessa forma ficaria mais legível o código e evitaria ter essa repetição de nomes iguais nos métodos.

Caso a sua dúvida tenha sido solucionada não esqueça de marcar a solução para que o tópico seja encerrado :)

Bons estudos.

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