Synlighet i PHP klasser objektorienterad programmering i PHP - Del 6 Inledning Detta är en del 6 av min serie, objektorienterad programmering i PHP. Nyckelorden, allmänheten, skyddad och privat kan betraktas som åtkomstspecifikations i PHP klasser. I PHP, kommer åtkomstspecifikationen under ämnet, synlighet. I denna del av serien jag förklara synlighet i PHP klasser. Vi har sett en av åtkomstspecifikations: allmänheten. I denna del av serien ska vi se betydelsen av alla tre och deras tillämpningar.
Obs: Om du inte kan se koden, eller om du tror att något saknas (bruten länk, bild frånvarande), bara att kontakta mig på [email protected]. Det vill säga, kontakta mig för minsta problem du har om vad du läser. Klass Struktur Strukturen för en klass är följande: klass classname {accessspecifier egendom; ... Accessspecifier metod {} ...} En åtkomstspecifikationen är nyckelordet, offentlig eller skyddad eller privat. Varje medlem (egenskap eller metod) bör föregås av en åtkomstspecifikation.
Om ingen tillgång specifikation finns det (skrivs) en metod, då standardåtkomstspecifikationen, antas för metoden är offentliga. Vad åtkomst till gruppmedlemmarna? Medlemmar i en klass kan få tillgång till andra medlemmar (egenskaper och metoder) av samma klassbeskrivningen. Funktioner, operatörer, uttalanden och andra klasser (objekt) utanför klass beskrivning av en viss klass kan också komma åt medlemmar i den klassen, när klassen är ett objekt.
En åtkomstspecifikation avgör huruvida en funktion eller operatör eller klass, inom eller utanför klassbeskrivningen kan komma åt medlem styr inuti sin klass. Ledamoten en tillgång specifice styr är medlem skrivit bredvid den i klassbeskrivningen. Jag kommer att använda uttalanden, funktioner och klasser i illustrationer av tillgång till klassmedlemmar. Jag kommer inte att använda operatörer för illustrationerna. Jag kommer att använda frasen "extern funktion". Detta hänvisar till en funktion eller klassmetod som inte är medlem i klassbeskrivningen i fråga.
Jag kommer också att använda frasen "yttre uttalande" av samma skäl. När jag säger en extern funktion kan komma åt en klassmedlem, menar jag den externa funktionen kan använda namnet (variabel av egendom eller namnet på metoden) av elementet som dess argument eller som en variabel inuti sin definition. Allmänhetens tillgång Specifier Med allmänhetens tillgång specifikation, kan en extern funktion tillgång till offentliga medlemmar i klassen.
Följande kod visar detta (läs förklaring nedan): class Calculator {public $ num1; offentlig $ num2; public function add () {$ summa = $ this-> num1 + $ this-> num2; returnera $ summa; }} Function myFn ($ par) {return $ par; } $ Obj = new Calculator (); $ obj-> num1 = 2; $ obj-> num2 = 3; $ result = $ obj-> lägg (); echo $ result. "$ MyVar = myFn ($ obj-> num1); echo $ myVar,> Det finns en funktion i koden: myFn () Du har också uttalanden som inte finns i någon funktion Den första raden bland de fria uttalanden instansieras.. klassobjektet kallas, obj.
Lines 2 och 3 av de fria uttalanden använder egenskaperna för klassen som variabler. Eftersom eleverna är offentliga, kan de fria uttalanden komma åt medlemmar i klassen. Vi har sett saker som förut, men nu använder jag dem att förklara specificeraren, allmänheten. Linje 4 av de fria uttalanden visar också detta. I linje 6 av de fria uttalanden, funktionen, myFn () använder egenskapen num1 av klassen som dess argument. Det kunde göra det eftersom medlemmen är offentlig i klassen num1.
Den privata åtkomst Specifier Med privat tillgång specifikation en extern funktion eller en extern uttalande kan inte komma åt privata medlemmar av klassen. Med privata specifice bara en medlem i en klassbeskrivning kan komma åt privata medlem i klassbeskrivningen. Följande kod visar hur endast en medlem av en klass kan komma åt en privat medlem av klassen (läs förklaring nedan): class Calculator {private $ num1; privat $ num2; public function add () {$ this-> num1 = 2; $ this-> num2 = 3; $ summa = $ this-> num1 + $ this-> num2; returnera $ summa; }} $ Obj = new Calculator (); $ result = $ obj-> lägg (); echo $ result; ?> Klassen har två privata medlemmar (egenskaper) och en offentlig medlem (metoden).
I klassbeskrivningen använder add () metoden definitionen av namnen på de privata medlemmar som variabler (t.ex. $ this-> num1). Så add () metoden, har en medlem av klassbeskrivningen nås privata medlemmar i klassbeskrivningen. Den andra raden av de fria uttalanden utanför klassbeskrivningen har kunnat få tillgång till add () metoden i klassen eftersom add () metoden är publikt (den har en allmänhetens tillgång specifikation).
I följande kod inte kommer att sammanställa eftersom den andra fria uttalande försöker komma åt (använd som variabel) en privat medlem i klassen: class Calculator {private $ num1; privat $ num2; public function add () {$ this-> num1; $ this-> num2 = 3; $ summa = $ this-> num1 + $ this-> num2; returnera $ summa; }} $ Obj = new Calculator (); $ obj-> num1 = 2; $ result = $ obj-> lägg (); echo $ result; ?> Den andra raden bland de fria påståenden är fel eftersom den försöker komma åt (användning som variabel) den privata ledamot, num1.
Den skyddade Tillgång Specifier Om en medlem av en klass är offentlig, kan det nås av en extern funktion och externa uttalande och också en härledd klass beskrivning. Om en medlem av en klass är privat, kan det inte nås av en extern funktion eller extern uttalande; även en härledd klass kan inte komma åt den. Frågan är, bör en härledd klass egentligen inte kunna få tillgång till en privat medlem av dess basklass (eftersom den härledda klassen och basklass är relaterade)? Jo, för att lösa detta problem har en annan tillgång specifikation kallas, skyddas.
Om en medlem av en klass är skyddad, kan den nås genom en härledd klass, men det kan inte nås av en extern funktion eller extern uttalande. Det kan också nås av medlemmar inom klassbeskrivningen (basklass). Följande kod visar hur en härledd klass kan få tillgång till en skyddad medlem i en basklass: klass Calculator {skyddade $ num1; skyddad $ num2; } Klass ChildCalculator utökar Calculator {public funktion add () {$ this-> num1 = 2; $ this-> num2 = 3; $ summa = $ this-> num1 + $ this-> num2; returnera $ summa; }} $ ChObj = new ChildCalculator (); $ result = $ chObj-> lägg (); echo $ result; ?> Basklassen har bara två fastigheter och ingen metod; dessa egenskaper är skyddade.
Den härledda klassen har en metod och ingen egendom. Inuti härledd klass, är de skyddade egenskaperna hos grundklass som används som variabler. I allmänhet när en härledd klass använder en medlem av en basklass, är det en metod av den härledda klassen som använder elementet, som i detta exempel. Ovanstående kod är OK.
I följande kod inte kommer att sammanställa, eftersom linje 2 bland de fria uttalanden försöker komma åt en skyddad medlem i en klass (basklass): class Calculator {skyddade $ num1; skyddad $ num2; } Klass ChildCalculator utökar Calculator {public funktion add () {$ this-> num1; $ this-> num2 = 3; $ summa = $ this-> num1 + $ this-> num2; returnera $ summa; }} $ Obj = new Calculator (); $ obj-> num1 = 2; $ chObj = new ChildCalculator (); $ result = $ chObj-> lägg (); echo $ result; ?>