Herança em PHP: o operador parent::
Gabarito: letra A. Para que SaidaNegrito imprima o texto herdado de SaidaSimples entre as etiquetas de formatação, o comentário #COMANDO deve ser substituído por parent::render();. Em PHP, a palavra-chave parent permite acessar métodos (e propriedades) da classe pai a partir de uma classe filha, e o operador de resolução de escopo :: é usado para chamar o método da classe pai — exatamente o que a alternativa A descreve.
A herança é um dos pilares da programação orientada a objetos. Quando uma classe SaidaNegrito estende SaidaSimples, ela herda todos os métodos públicos e protegidos da classe pai. Isso significa que, se SaidaSimples tem um método render(), a classe filha pode usá-lo diretamente, como se fosse seu. Porém, quando a classe filha redefine (sobrescreve) esse método — que é o caso típico aqui, já que SaidaNegrito quer adicionar as etiquetas de formatação —, a versão original da classe pai fica "escondida" pela nova versão. Para chamar a implementação original, o PHP oferece a palavra-chave parent.
A sintaxe parent::render() funciona assim: parent é uma referência especial que aponta para a classe pai da classe atual, e :: é o operador de resolução de escopo, que permite acessar métodos estáticos, constantes ou métodos da classe pai sem precisar de uma instância. No contexto de um método de instância, parent::render() invoca o método render() definido na classe pai, permitindo que a classe filha reutilize a lógica original e adicione algo em volta — no caso, as etiquetas de formatação.
Vamos a um exemplo concreto. Suponha que SaidaSimples tenha:
class SaidaSimples {
public function render() {
echo "texto";
}
}
E SaidaNegrito estenda SaidaSimples:
class SaidaNegrito extends SaidaSimples {
public function render() {
echo "<b>";
parent::render(); // chama SaidaSimples::render()
echo "</b>";
}
}
Ao chamar (new SaidaNegrito())->render(), a saída será <b>texto</b>. Sem o parent::, a classe filha entraria em recursão infinita (chamaria a si mesma), ou, se não sobrescrevesse o método, simplesmente herdaria o comportamento original sem as etiquetas.
A pegadinha desta questão está em confundir parent com outras formas de referência. parent é uma palavra-chave reservada do PHP, não uma variável — por isso $super->render() e $inherited->render() estão errados: $super e $inherited não são definidos em lugar nenhum, e mesmo que fossem, a sintaxe com -> é para chamar métodos de uma instância, não da classe pai. SaidaSimples->render() também está errado porque falta o operador :: (seria SaidaSimples::render()), e mesmo assim, usar o nome da classe diretamente não é a forma idiomática — parent:: é mais robusto, pois não exige saber o nome da classe pai. base::render() está errado porque base não é uma palavra-chave do PHP para herança; a palavra-chave correta é parent.
Guarde a distinção: parent:: é a forma correta de chamar um método da classe pai dentro de uma classe filha. É exatamente nesse ponto que as alternativas se dividem — as erradas usam variáveis inexistentes, sintaxe incorreta ou palavras-chave que não existem no PHP.
Alternativa A — ✅ Correta ⟵ GABARITO
parent::render(); é a sintaxe correta. A palavra-chave parent referencia a classe pai, e o operador :: (resolução de escopo) permite chamar o método render() da classe SaidaSimples. Isso executa a implementação original, permitindo que SaidaNegrito adicione as etiquetas de formatação ao redor.
Alternativa B — ❌ Incorreta
$super->render(); está errada porque $super não é uma variável definida no código. Em PHP, a referência à classe pai é feita pela palavra-chave parent, não por uma variável. Além disso, o operador -> é usado para chamar métodos de uma instância de objeto, não para acessar a classe pai.
Alternativa C — ❌ Incorreta
SaidaSimples->render(); está errada porque falta o operador de resolução de escopo ::. A sintaxe correta para chamar um método estático ou da classe pai seria SaidaSimples::render(). Além disso, usar o nome da classe diretamente não é a forma idiomática dentro de uma classe filha — parent:: é mais adequado e não depende do nome da classe pai.
Alternativa D — ❌ Incorreta
base::render(); está errada porque base não é uma palavra-chave do PHP para herança. A palavra-chave correta é parent. O PHP não reconhece base como referência à classe pai, então o código geraria um erro fatal.
Alternativa E — ❌ Incorreta
$inherited->render(); está errada pela mesma razão da alternativa B: $inherited não é uma variável definida. A referência à classe pai é feita com parent, não com uma variável. O operador -> também não é apropriado para acessar a classe pai.
Gabarito: letra A