1
resposta

Necessidade de "require" nas classes filhas

Fiz o código semelhante ao capítulo 1, parte 11. Porém, ao declarar as classes filhas, uma coisa interessante acontece.

Na classe "Titular", preciso dar um "require" na classe "Pessoa", se não acontece o erro:

Fatal error: Uncaught Error: Class 'Pessoa' not found in (...) \src\Titular.php:5

Já na classe "Funcionario", acontece justamente o contrário: não posso colocar o "require" da classe "Pessoa", pois apresenta o seguinte erro:

Cannot declare class Pessoa, because the name is already in use in (...) \src\Pessoa.php on line 3

Ok, se eu colocar o "require" na classe "Titular" e não colocar na classe "Funcionario", funciona. Mas isso é muito estranho, por que acontece isso???

1 resposta

Olá, Giuli! Tudo bem?

Peço desculpa pela demora para responder o seu tópico.

Realmente é fácil se confundir com a necessidade ou não de utilizar o "require" nas suas classes filhas. Vou tentar explicar o motivo dessa diferença de comportamento.

Quando você utiliza o "require" em uma classe filha, está informando que essa classe depende da classe pai para funcionar corretamente. No caso da classe "Titular", ao utilizar o "require" para incluir a classe "Pessoa", você está garantindo que a classe "Titular" terá acesso aos métodos e propriedades da classe "Pessoa". Por isso, se você não incluir o "require" na classe "Titular", ocorre o erro informando que a classe "Pessoa" não foi encontrada.

Já na classe "Funcionario", ocorre o erro "Cannot declare class Pessoa, because the name is already in use" ocorre porque a classe "Pessoa" já foi declarada anteriormente, no seu caso para a classe "Titular". Isso acontece, provavelmente, você já incluiu a classe "Pessoa" em algum outro lugar do seu código antes de declarar a classe "Funcionario".

Em resumo, a necessidade de utilizar o "require" nas classes filhas, está relacionado a dependência dessas classes em relação à classe pai e também da ordem em que as classes são incluídas no código.

Espero ter ajudado a esclarecer a sua dúvida! Se tiver mais alguma pergunta, estou à disposição.

Grande abraço e bons estudos!

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