Question du test PHP8

Code PHP qui lève une erreur TypeError

Difficile

Que va afficher ce code ?

<?php

class Foo
{
    private ?string $bar;

    public function setBar(?string $secondLine): void
    {
        $this->bar = $secondLine;
    }

    public function getBar(): ?string
    {
        $this->bar;
    }
}

$address = new Foo();
$address->setBar(null);
echo $address->getBar() ?? 'john doe';
Auteur: Équipe W3DStatut : PubliéeQuestion passée 1065 fois
Modifier
2
Évaluations de la communauté
developer avatar
Cyrille
03/10/2023
'john doe' est pour moi la bonne réponse et pourtant, j'ai faux à cette question. $bar est setté à null. Dans l'expression "$address->getBar() ?? 'john doe';", $address->getBar() devrait est égal à false.
developer avatar
Auteur anonyme
06/10/2023
Il manque le "return" à la fonction getBar(), d'où l'erreur renvoyée par PHP
developer avatar
Autre
Julien HUMBERT
06/11/2023
C'est un piège, je suis passé à côté du return manquant, on ne s'attend pas dans un getter (de plus généré automatiquement par l'IDE, ou par copilot maintenant) à avoir le return manquant. Pour moi la réponse faisait suite à la première question où là il y avait vraiment une erreur à cause de $bar non initialisé, et donc savoir ce qui s'affiche vraiment quand on utilise l'opérateur ??
developer avatar
Auteur anonyme
06/11/2023
Hello Julien, assez d'accord avec toi. Pourrais-tu proposer une modification ? Je n'y connais pas grand chose en PHP
developer avatar
abdelghani
18/03/2024
il manque effectivement le return de getBar() pour que la réponse 'john doe' soit valide.
developer avatar
Paul TOTI
06/05/2024
Si $bar n'a jamais été défini, elle est null par défaut en raison de son type nullable ( ?string). L'accès à une propriété nullable non initialisée qui est lue (et non écrite ou utilisée dans un contexte nécessitant une valeur non nulle) retourne simplement null. Il n'y a pas d'erreur car PHP gère cette situation de manière interne en retournant null