web-dev-qa-db-fra.com

Visibilité par défaut des méthodes de classe dans PHP

J'ai regardé le manuel , mais je n'arrive pas à trouver la réponse.

Quelle est la visibilité par défaut dans PHP pour les méthodes sans déclaration de visibilité? Est-ce que PHP a la visibilité d'un paquet comme en Java? 

Par exemple, dans le code suivant, go() est-il public ou privé?

class test {
  function go() {
  }
}

La raison pour laquelle j’ai posé la question est que j’ai vu de nombreux codes de constructeurs écrits sous la forme function __construct() et certains sous la forme public function __construct(). Sont-ils équivalents?

102
Yada

La valeur par défaut est publique.

Les méthodes de classe peuvent être définies comme publiques, privées ou protégées. Les méthodes déclarées sans mot-clé de visibilité explicite sont définies comme publiques.

http://www.php.net/manual/en/language.oop5.visibility.php

157
Jansen Price

La valeur par défaut est publique. C'est une bonne pratique de toujours l'inclure, cependant PHP4 supporte les classes sans modificateurs d'accès, il est donc courant de ne voir aucune utilisation de celles-ci dans le code hérité.

Et non, PHP n'a aucune visibilité sur les paquets, principalement parce que jusqu'à récemment PHP n'avait aucun paquet.

21
Johnco

La valeur par défaut est publique. La raison en est probablement une compatibilité ascendante car l'ancien code s'attend à ce qu'il soit public (il cesserait de fonctionner s'il n'était pas public).

8
Tomas Markauskas

La visibilité par défaut est PUBLIC

La source

6
Sasa

function __construct() et public function __construct() fonctionnent comme le même nom de méthode.

Si vous ne pouvez pas définir le préfixe d'un nom de méthode, il devrait être public par défaut.

0
Gazi Anis

Si aucun mot-clé visibilité (public, private ou protected) n'est utilisé, les méthodes seront public. Mais vous ne pouvez pas définir les propriétés de cette manière. Pour propriétés , vous devrez ajouter un mot clé de visibilité dans la déclaration.

Pour les propriétés qui ne sont pas déclarées dans la classe et que vous lui affectez une valeur dans une méthode, le système aura une visibilité publique.

<?php
class Example {
    public $name; 
    public function __construct() {
        $this -> age = 9; // age is now public
        $this -> privateFunction();
    }
    private function privateFunction() {
        $this -> country = "USA"; // this is also public
    }
}
0
James.Valon