Visibilité dans les classes PHP programmation orientée objet en PHP - Partie 6 Introduction Cela fait partie de ma série 6, Programmation Orientée Objet en PHP. Les mots-clés, du public, protégés et privé peuvent être considérés comme des spécificateurs d'accès à des classes PHP. En PHP, spécificateur d'accès vient sous le thème, la visibilité. Dans cette partie de la série je l'explique visibilité dans les classes PHP. Nous avons vu un des spécificateurs d'accès: public. Dans cette partie de la série, nous verrons les significations de tous les trois et leurs applications.
Remarque: Si vous ne pouvez pas voir le code ou si vous pensez que quelque chose manquait (lien brisé, l'image absente), contactez-moi au [email protected]. Qui est, me contacter pour le moindre problème que vous avez à propos de ce que vous lisez. Structure de classe La structure d'une classe est comme suit: classe className {accessspecifier biens; ... Accessspecifier méthode {...}} Un spécificateur d'accès est le mot-clé, public ou protégé ou privé. Chaque membre (propriété ou méthode) doit être précédée par un spécificateur d'accès.
Si aucun spécificateur d'accès est là (dactylographiée) pour une méthode, le spécificateur d'accès par défaut, assumé pour la méthode est publique. Quel accès les membres du groupe? Les membres d'une classe peuvent accéder à d'autres membres (propriétés et méthodes) de la même description de classe. Les fonctions, les opérateurs, les déclarations et les autres classes (objets) en dehors de la description de classe d'une classe particulière peuvent également accéder à des membres de cette catégorie, lorsque la classe est un objet.
Un spécificateur d'accès décide si oui ou non une fonction ou un opérateur ou de la classe, à l'intérieur ou à l'extérieur de la description de la classe peut accéder au membre qu'elle contrôle à l'intérieur de sa catégorie. Le membre d'un spécificateur d'accès contrôle est le membre tapé à côté de lui dans la description de la classe. Je vais utiliser des déclarations, des fonctions et des classes dans les illustrations de l'accès aux membres de la classe. Je ne vais pas utiliser des opérateurs pour les illustrations. Je vais utiliser l'expression «fonction externe".
Ceci se rapporte à une méthode de fonction ou une classe qui est pas un membre de la description de la classe en question. Je vais aussi utiliser l'expression «déclaration externe" pour la même raison. Quand je dis une fonction externe peut accéder à un membre de la classe, je veux dire la fonction externe peut utiliser le nom (variable de la propriété ou le nom de la méthode) de l'élément comme argument ou comme une variable dans sa définition. Le spécificateur d'accès public avec le spécificateur d'accès public, une fonction externe peut accéder aux membres publics de la classe.
Le code suivant illustre cette (lire l'explication ci-dessous): Calculatrice de classe {$ de num1 public; $ num2 public; fonction publique add () {$ somme = $ this-> num1 + $ this-> num2; return $ somme; }} Function myFn ($ nominale) {return $ nominale; } $ Obj = new Calculator (); $ obj-> num1 = 2; $ obj-> num2 = 3; Résultat $ = $ obj-> ajouter (); echo $ résultat. "$ MyVar = myFn (obj- $> num1); echo $ myVar;> Il ya une fonction dans le code:? MyFn () Vous avez également des déclarations qui ne sont pas dans une fonction La première ligne parmi les états instantiates gratuits..
l'objet de classe appelé, obj. Lignes 2 et 3 des états libres d'utiliser les propriétés de la classe comme des variables. Parce que les membres de la classe sont publiques, les comptes gratuits peuvent accéder les membres de la classe. Nous avons vu des choses comme ça avant, mais maintenant, je les utilise pour expliquer le prescripteur, public. Ligne 4 des états libres démontre également présent. Dans la ligne 6 des états libres, la fonction, myFn () utilise le num1 de propriété de la classe comme argument. Il pourrait le faire parce que le député, num1 est public dans la classe.
Le spécificateur d'accès privé avec le spécificateur d'accès privée d'une fonction externe ou une déclaration externe ne peut pas accéder aux membres privés de la classe. Avec le spécificateur privé seulement un membre d'une description de classe peut accéder à l'initiative parlementaire de la description de classe.
Le code suivant montre comment seul un membre d'une classe peut accéder à un membre privé de la classe (lire l'explication ci-dessous): Calculatrice de classe {private $ de num1; $ num2 privé; fonction publique add () {$ this-> num1 = 2; $ this-> num2 = 3; $ somme = $ this-> num1 + $ this-> num2; return $ somme; }} $ Obj = new Calculator (); Résultat $ = $ obj-> ajouter (); echo $ result; ?> La classe dispose de deux membres privés (propriétés) et un membre du public (méthode).
Dans la description de la classe, l'add () définition de la méthode utilise les noms des membres privés comme des variables (par exemple, $ this-> NUM1). Donc, la méthode add (), un membre de la description de classe a accédé aux membres privés de la description de classe. Le deuxième ligne des états libres en dehors de la description de la classe a été en mesure d'accéder à la méthode add () de la classe parce que la méthode add () est public (il a un spécificateur d'accès public).
Le code suivant ne compilera pas parce que la deuxième déclaration libre essaie d'accéder (utilisation comme variable) un membre privé de la classe: Calculatrice de classe {private $ de num1; $ num2 privé; fonction publique add () {$ this-> num1; $ this-> num2 = 3; $ somme = $ this-> num1 + $ this-> num2; return $ somme; }} $ Obj = new Calculator (); $ obj-> num1 = 2; Résultat $ = $ obj-> ajouter (); echo $ result; ?> La deuxième ligne entre les états libres est erroné parce qu'il tente d'accéder (utilisation comme variable), l'organe privé, num1.
Le spécificateur d'accès protégé Si un membre d'une classe est public, il peut être accédé par une fonction externe et l'état externe et aussi une description de la classe dérivée. Si un membre d'une classe est privée, il ne peut être accédé par une fonction externe ou une déclaration externe; même une classe dérivée ne peut pas y accéder.
La question est, si une classe dérivée pas vraiment être en mesure d'accéder à un membre privé de sa classe de base (depuis la classe de la classe et de la base dérivée sont liés)? Eh bien, pour résoudre ce problème vous avez un autre spécificateur d'accès appelé, protégé. Si un membre d'une classe est protégée, il peut être consulté par une classe dérivée, mais il ne peut être accédé par une fonction externe ou une déclaration externe. Il peut également être consulté par les membres au sein de la description de classe (classe de base).
Le code suivant illustre comment une classe dérivée peut accéder à un membre protégé d'une classe de base: Calculatrice de classe {protected $ de num1; protected $ num2; } Class ChildCalculator étend Calculatrice {public function add () {$ this-> num1 = 2; $ this-> num2 = 3; $ somme = $ this-> num1 + $ this-> num2; return $ somme; }} $ ChObj = new ChildCalculator (); Résultat $ = $ chObj-> ajouter (); echo $ result; ?> La classe de base a seulement deux propriétés et aucune méthode; ces propriétés sont protégés. La classe dérivée a une méthode et pas de propriété.
L'intérieur de la classe dérivée, les propriétés protégées de la classe de base sont utilisés comme variables. En général, quand une classe dérivée utilise un membre d'une classe de base, elle est une méthode de la classe dérivée qui utilise l'élément, comme dans cet exemple. Le code ci-dessus est OK.
Le code suivant ne compilera pas, parce que la ligne 2 entre les états libres tente d'accéder à un membre d'une classe protégée (classe de base): Calculatrice de classe {protected $ de num1; protected $ num2; } ChildCalculator de classe étend Calculatrice {public function add () {$ this-> num1; $ this-> num2 = 3; $ somme = $ this-> num1 + $ this-> num2; return $ somme; }} $ Obj = new Calculator (); $ obj-> num1 = 2; $ chObj = new ChildCalculator (); Résultat $ = $ chObj-> ajouter (); echo $ result; ?>