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

118

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

Quelle est la visibilité par défaut en PHP pour les méthodes sans déclaration de visibilité? PHP a-t-il une visibilité sur les packages comme en Java?

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

class test {
  function go() {
  }
}

La raison pour laquelle j'ai demandé est que j'ai vu de nombreux codes de constructeurs écrits comme function __construct()et certains comme public function __construct(). Sont-ils équivalents?

Yada
la source

Réponses:

179

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 aucun mot clé de visibilité explicite sont définies comme publiques.

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

Prix ​​Jansen
la source
11
Il en va de même pour les propriétés
Marc 2377
7
Il en va de même pour les constantes.
Kolyunya
22

La valeur par défaut est publique. C'est une bonne pratique de toujours l'inclure, mais les classes supportées par PHP4 sans modificateurs d'accès, il est donc courant de ne pas les utiliser dans le code hérité.

Et non, PHP n'a pas de visibilité sur les packages, principalement parce que jusqu'à récemment, PHP n'avait pas de packages.

Johnco
la source
16
@Ian: Je dirais parce que "explicite vaut mieux qu'implicite" (comme le dit le Zen de python ). Cela amène d'autres programmeurs à gaspiller des cycles cérébraux en se demandant si le constructeur est privé ou public ou quoi. Si les gens utilisaient toujours des modificateurs d'accès, l'affiche originale n'aurait peut-être même pas posé cette question.
Utilisateur
A noter également, sur des langages tels que Java, où la valeur par défaut est package-private, on se demande toujours si c'est package-private par conception, ou si le développeur a simplement oublié de le spécifier (surtout lorsqu'il s'agit de développeurs pas si expérimentés). C'est pourquoi PMD inclut des règles telles que celle-ci: pmd.github.io/pmd-5.5.2/pmd-java/rules/java/…
Johnco
9

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

Tomas Markauskas
la source
Félicitations pour le raisonnement.
Guney Ozsan
7

La visibilité par défaut est PUBLIC

La source

Sasa
la source
1

En l' absence de visibilité mot - clé ( public, privateou protected) utilisés, les méthodes seront publiques . Mais vous ne pouvez pas définir les propriétés de cette manière. Pour les propriétés , vous devrez ajouter un mot clé de visibilité lors de la déclaration.

Pour les propriétés qui ne sont pas déclarées dans la classe et que vous lui attribuez une valeur à l'intérieur d'une méthode 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
    }
}
James.Valon
la source
0

function __construct()et public function __construct()fonctionne avec le même nom de méthode.

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

Gazi Anis
la source