2010-02-08 3 views
89

J'ai regardé le manual, mais je n'arrive pas à trouver la réponse.Visibilité par défaut des méthodes de classe en PHP

Quelle est la visibilité par défaut en PHP pour les méthodes sans déclaration de visibilité? Est-ce que PHP a une visibilité de 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 demandé est que je l'ai vu beaucoup de code constructeurs écrit function __construct() et certains comme public function __construct(). Sont-ils équivalents?

Répondre

141

La valeur par défaut est public.

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

+4

Il en va de même pour les propriétés –

+0

Il en va de même pour les constantes. – Kolyunya

18

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

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

+1

Pourquoi est-il "une bonne pratique d'inclure toujours"? – Ian

+14

@Ian: Je dirais parce que "explicite est mieux que implicite" (comme le dit [Zen of python] (http://stackoverflow.com/questions/228181/the-zen-of-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. – User

+0

De plus, sur des langages tels que Java, la valeur par défaut est package-private, on se demande toujours si c'est un paquet-private by design, ou le développeur a juste oublié de le spécifier (spécialement pour les développeurs pas très expérimentés) . C'est pourquoi PMD inclut des règles telles que: https://pmd.github.io/pmd-5.5.2/pmd-java/rules/java/comments.html#CommentDefaultAccessModifier – Johnco

7

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

Questions connexes