Fonctions d'ami en ligne : portée et accessibilité
Lors de la définition d'une fonction d'ami en ligne dans une classe, sa portée est principalement influencée par l'élément englobant le plus proche espace de noms. La déclaration ami introduit un nom de fonction dans l'espace de noms, mais elle ne rend pas immédiatement la fonction visible pour une recherche régulière dans cette portée.
Selon la norme C (ISO/IEC 14882:2011), "si un La déclaration ami dans une classe non locale déclare d'abord une classe ou une fonction, la classe ou la fonction ami est membre de l'espace de noms englobant le plus interne. Cela signifie que le nom de la fonction ami n'est initialement pas trouvé via une recherche non qualifiée ou qualifiée dans la portée de l'espace de noms.
Uniquement lorsqu'une déclaration correspondante est fournie dans la portée de l'espace de noms lui-même, avant ou après la définition de la classe qui accorde l'amitié, la fonction deviendra-t-elle visible grâce à une recherche sans réserve. De plus, la fonction ami peut toujours être appelée via une recherche dépendante des arguments, qui prend en compte les fonctions des espaces de noms et des classes associées aux types d'arguments.
Par exemple, le code fourni dans la question définit une fonction ami en ligne nommée baz dans la classe bar dans l'espace de noms foo. Cependant, les tentatives d'appel de baz à partir de différentes portées au sein du programme entraînent des erreurs car la fonction n'est pas visible via une recherche régulière :
Par conséquent, les fonctions d'ami en ligne ont une accessibilité limitée et portée. Ils sont principalement connus pour leur capacité à accéder aux membres privés et protégés d’une classe sans spécifier le nom de la classe comme qualificatif. Cependant, leur visibilité dans la portée environnante est limitée jusqu'à ce qu'une déclaration correspondante soit fournie dans l'espace de noms ou via une recherche dépendante des arguments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!