W3docs

public

Le mot-clé "public" en PHP déclare un membre de classe accessible depuis n'importe où dans votre code. Découvrez la syntaxe et les bonnes pratiques.

Le mot-clé PHP public

public est l'un des trois modificateurs de visibilité (accès) de PHP, aux côtés de private et protected. Un membre de classe déclaré public peut être lu et modifié — ou, pour les méthodes, appelé — depuis n'importe où : à l'intérieur de la classe, depuis une sous-classe, et depuis tout code qui détient un objet de la classe.

Cette page couvre la syntaxe, les endroits où public s'applique, la façon dont il diffère des autres modificateurs, les règles de visibilité par défaut, et les pièges pratiques liés à l'exposition publique des membres. Si les classes sont nouvelles pour vous, commencez par PHP Classes et Objets.

Syntaxe

Placez le mot-clé public avant une déclaration de propriété, de méthode ou de constante :

class MyClass {
  public $myPublicProperty;          // public property
  public const VERSION = '1.0';      // public constant (PHP 7.1+)

  public function myPublicMethod() {
    // accessible from anywhere
  }
}

public peut modifier :

  • Les propriétéspublic $name;
  • Les méthodespublic function greet() { ... }
  • Les constantespublic const MAX = 10; (PHP 7.1+ ; les constantes sont implicitement publiques si aucun modificateur n'est donné)
  • Les paramètres de promotion de constructeurpublic function __construct(public string $name) {} (PHP 8.0+)

Visibilité par défaut

La visibilité est optionnelle en PHP. La valeur par défaut dépend du type de membre :

  • Une méthode sans modificateur est implicitement public. function honk() et public function honk() signifient la même chose.
  • Une propriété doit utiliser l'un des modificateurs (public, protected ou private) ou var. Historiquement, var $x; était un alias pour public $x; et est encore accepté mais déconseillé.
  • Une constante de classe sans modificateur est implicitement public.

Écrire public explicitement est le style recommandé — cela rend l'intention évidente pour toute personne lisant le code.

Exemples

Regardons quelques exemples pratiques de la façon dont le mot-clé "public" peut être utilisé :

Exemples du mot-clé public en PHP

<?php

// Example 1
class Car
{
  public $model;
  public $color;

  public function __construct($model, $color)
  {
    $this->model = $model . PHP_EOL;
    $this->color = $color;
  }

  public function honk()
  {
    return "Beep beep!" . PHP_EOL;
  }
}

$myCar = new Car("Tesla", "red");
echo $myCar->model; // Output: Tesla
echo $myCar->honk(); // Output: Beep beep!

// Example 2
class Math
{
  public static function add($a, $b)
  {
    return $a + $b;
  }

  public static function multiply($a, $b)
  {
    return $a * $b;
  }
}

echo Math::add(5, 10); // Output: 15
echo Math::multiply(5, 10); // Output: 50

Ici, $model, honk(), et les méthodes statiques de Math sont toutes public, donc le code appelant y accède directement via -> (instances) ou :: (membres statiques).

Promotion de constructeur (PHP 8.0+)

Depuis PHP 8.0, vous pouvez déclarer et initialiser une propriété publique directement depuis un paramètre de constructeur, supprimant le code répétitif $this->x = $x; :

<?php

class Point
{
  public function __construct(
    public int $x = 0,
    public int $y = 0
  ) {}
}

$p = new Point(3, 4);
echo "$p->x,$p->y" . PHP_EOL; // Output: 3,4

C'est équivalent à déclarer public int $x; et à l'assigner dans le corps du constructeur. Voir PHP Constructor pour une vue complète.

public vs. protected vs. private

PHP dispose de trois modificateurs de visibilité. La différence réside dans l'endroit où un membre peut être accédé :

ModificateurMême classeSous-classeCode extérieur
publicouiouioui
protectedouiouinon
privateouinonnon

Le script suivant montre les limites en action :

<?php

class Base
{
  public $open = 'public';
  protected $family = 'protected';
  private $secret = 'private';

  public function reveal()
  {
    // Inside the class, all three are reachable.
    return "$this->open / $this->family / $this->secret" . PHP_EOL;
  }
}

$b = new Base();

echo $b->open . PHP_EOL;  // Output: public  (allowed from outside)
echo $b->reveal();        // Output: public / protected / private

// echo $b->family;       // Fatal error: Cannot access protected property
// echo $b->secret;       // Fatal error: Cannot access private property

Seul $open est accessible directement depuis l'extérieur de la classe. $family et $secret ne peuvent être lus qu'à travers la méthode publique reveal().

Quand utiliser public

Utilisez public pour les parties d'une classe qui constituent son API — les méthodes et les données sur lesquelles vous souhaitez que le code extérieur s'appuie. Gardez tout le reste en private ou protected.

  • Exposez un comportement, pas un état brut. Préférez les méthodes public (getEmail(), withdraw($amount)) aux propriétés public, afin de conserver le contrôle sur la validation et de pouvoir modifier les éléments internes ultérieurement sans casser les appelants.
  • Une propriété public est un contrat : une fois que du code extérieur en dépend, la renommer ou la supprimer constitue un changement de rupture.
  • Utilisez public static pour les méthodes utilitaires/factory qui n'ont pas besoin d'une instance (voir PHP Static Methods).
  • Les méthodes d'interface sont toujours effectivement publiques — voir PHP Interfaces.

Résumé

  • public rend un membre de classe accessible depuis n'importe où ; c'est le plus permissif des trois modificateurs de visibilité de PHP.
  • Les méthodes et les constantes sont public par défaut ; les propriétés doivent déclarer explicitement leur visibilité.
  • Réservez public pour l'API prévue d'une classe et cachez les détails d'implémentation derrière private/protected pour une meilleure encapsulation.

Continuez avec private, protected, et PHP Inheritance pour compléter votre compréhension de la visibilité.

Pratique

Pratique
En PHP, que désigne le terme 'public' lorsqu'il est utilisé avec les propriétés et les méthodes d'une classe ?
En PHP, que désigne le terme 'public' lorsqu'il est utilisé avec les propriétés et les méthodes d'une classe ?
Was this page helpful?