Synlighed i PHP Klasser objektorienteret programmering i PHP - Del 6 Introduktion Dette er en del 6 af min serie, objektorienteret programmering i PHP. De søgeord, offentlig, beskyttet og privat kan betragtes som adgang beregnere i PHP klasser. I PHP, adgang anvisning kommer under emnet, synlighed. I denne del af serien jeg forklare synlighed i PHP klasser. Vi har set en af de adgang beregnere: offentligheden. I denne del af serien skal vi se betydningen af alle tre, og deres ansøgninger.
Bemærk: Hvis du ikke kan se koden, eller hvis du tror noget mangler (brudt link, billede fraværende), bare kontakte mig på [email protected]. Det vil sige, kontakt mig for det mindste problem, du har om, hvad du læser. Klassestruktur Strukturen i en klasse er som følger: class className {accessspecifier ejendom; ... Accessspecifier metode {} ...} Et adgangspunkt anvisning er nøgleordet, offentlige eller beskyttet eller privat. Bør indledes hvert medlem (egenskab eller metode) af en adgang anvisning.
Hvis der ikke adgang anvisning er der (indtastet) for en metode, så standardadgangspunkt anvisning, antages metoden er offentligt. Hvad får adgang til klasse medlemmer? Medlemmer af en klasse kan få adgang til andre medlemmer (egenskaber og metoder) af samme klasse beskrivelsen. Funktioner, operatører, erklæringer og andre klasser (objekter) uden for klassen beskrivelse af en bestemt klasse kan også få adgang medlemmer af denne klasse, når klassen er et objekt.
Et adgangspunkt anvisning afgør, om en funktion eller operatør eller klasse, i eller uden for klassen beskrivelsen kan få adgang til medlem den styrer inde i sin klasse. Medlemmet en adgang anvisning styrer er medlem indtastet ved siden af det i klassen beskrivelsen. Jeg vil bruge erklæringer, funktioner og klasser i illustrationerne til adgang til klassen medlemmer. Jeg vil ikke bruge operatørerne til illustrationerne. Jeg vil bruge udtrykket, "ekstern funktion". Dette henviser til en funktion eller klasse metode, der ikke er medlem af klassen beskrivelse pågældende.
Jeg vil også benytte udtrykket "eksterne statement" af samme grund. Når jeg siger en ekstern funktion kan få adgang til en elev, jeg mener den eksterne funktion kan bruge navnet (variabel af ejendom eller navnet på metoden) af elementet som sit argument eller som en variabel inde i sin definition. Den offentlige adgang Specifier Med offentlig adgang anvisning, kan en ekstern funktion få adgang til de offentlige medlemmer af klassen.
Følgende kode illustrerer dette (læs forklaringen nedenfor): class Lommeregner {public $ num1; offentlig $ num2; offentlig funktion add () {$ sum = $ this-> num1 + $ this-> num2; returnere $ sum; }} Funktionen myFn ($ pari) {tilbagevenden $ fod; } $ Obj = ny Lommeregner (); $ obj-> num1 = 2; $ obj-> num2 = 3; $ resultere = $ obj-> tilføje (); echo $ resultat. "$ MyVar = myFn ($ obj-> num1) echo $ myVar;> Der er én funktion i koden:? MyFn () Du har også udsagn, som ikke i nogen funktion Den første linje blandt de frie udsagn instantierer.. klassen objekt kaldet, obj.
Lines 2 og 3 af de gratis erklæringer anvender egenskaberne for klasse som variabler. Fordi klassen medlemmer er offentlige, kan de gratis udsagn adgang til medlemmer af klassen. Vi har set ting som dette før, men nu, jeg bruger dem til at forklare anvisning, offentligheden. linje 4 af de gratis udsagn viser også dette. I tråd 6 af de frie udsagn, den funktion, myFn () anvender ejendommen num1 af klassen som sit argument. Det kunne gøre det, fordi medlemmet, num1 er offentlig i klassen.
Den private Access Specifier Med privat adgang anvisning en ekstern funktion eller en ekstern sætningen kan ikke få adgang til de private medlemmer af klassen. Med den private anvisning kun et medlem af en klasse beskrivelse kan få adgang til private medlem af klassen beskrivelsen. Følgende kode viser, hvor kun et medlem af en klasse kan få adgang til en privat medlem af klassen (læs forklaringen nedenfor): class Lommeregner {private $ num1; privat $ num2; offentlig funktion add () {$ this-> num1 = 2; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; returnere $ sum; }} $ Obj = ny Lommeregner (); $ resultere = $ obj-> tilføje (); echo $ resultat; ?> Klassen har to private medlemmer (egenskaber) og en offentlig medlem (metode).
I klassen beskrivelse, add () metode definition bruger navnene på de private medlemmer som variabler (f.eks $ this-> num1). Så add () metode, har et medlem af klassen beskrivelsen tilgås de private medlemmer af klassen beskrivelsen. Den anden linje af de gratis udsagn uden for klassen beskrivelse har været i stand til at få adgang til add () metode i klassen, fordi add () metoden er offentlig (det har en offentlig adgang anvisning).
Følgende kode vil ikke kompilere, fordi den anden frie udsagn forsøger at få adgang (brug som variabel) en privat medlem af klassen: class Lommeregner {private $ num1; privat $ num2; offentlig funktion add () {$ this-> num1; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; returnere $ sum; }} $ Obj = ny Lommeregner (); $ obj-> num1 = 2; $ resultere = $ obj-> tilføje (); echo $ resultat; ?> Den anden linje blandt de frie udsagn er forkert, fordi det forsøger at få adgang til (brug som variabel) den private medlem, num1.
Den beskyttede Access Specifier Hvis et medlem af en klasse er offentlig, kan det tilgås af en ekstern funktion og ekstern redegørelse og også en afledt klasse beskrivelse. Hvis et medlem af en klasse er privat, kan det ikke tilgås af en ekstern funktion eller ekstern erklæring; selv en afledt klasse kan ikke få adgang til det. Spørgsmålet er, bør en afledt klasse ikke rigtig kunne få adgang til en privat medlem af sin base klasse (da den afledte klasse og base klasse er relateret)? Nå, for at løse dette problem, du har en anden adgang til anvisning kaldes, beskyttet.
Hvis et medlem af en klasse er beskyttet, kan det tilgås af en afledt klasse, men det kan ikke tilgås af en ekstern funktion eller ekstern erklæring. Det kan også tilgås af medlemmerne inden for klassen beskrivelse (base klasse). Følgende kode viser, hvordan en afledt klasse kan få adgang til et beskyttet medlem af en base klasse: class Lommeregner {beskyttet $ num1; beskyttet $ num2; } Class ChildCalculator udvider Lommeregner {offentlig funktion add () {$ this-> num1 = 2; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; returnere $ sum; }} $ ChObj = ny ChildCalculator (); $ resultere = $ chObj-> tilføje (); echo $ resultat; ?> Basen klasse har kun to ejendomme og ingen metode; disse egenskaber er beskyttede.
Den afledte klasse har en fremgangsmåde og ingen fast ejendom. Inde i afledte klasse, er de beskyttede egenskaber basen klassen anvendes som variable. Generelt, når en afledt klasse bruger et medlem af en base klasse, det er en fremgangsmåde af den afledte klasse, der bruger elementet, som i dette eksempel. Ovenstående kode er OK.
Følgende kode vil ikke kompilere, fordi linje 2 blandt de frie udsagn forsøger at få adgang til et beskyttet medlem af en klasse (base klasse): klasse Lommeregner {beskyttet $ num1; beskyttet $ num2; } Class ChildCalculator udvider Lommeregner {offentlig funktion add () {$ this-> num1; $ this-> num2 = 3; $ sum = $ this-> num1 + $ this-> num2; returnere $ sum; }} $ Obj = ny Lommeregner (); $ obj-> num1 = 2; $ chObj = ny ChildCalculator (); $ resultere = $ chObj-> tilføje (); echo $ resultat; ?>