, - magische methoden in PGB,,,,,,,,,,,, deel 7,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen.,, PHP een magische "- methode, dat je in de gerichte programma 's heeft een mooie truc.Deze methode werd onderstreept, een voorvoegsel (__), de functie van interceptie, wanneer aan bepaalde voorwaarden is voldaan - noemen.Magische oplossing bevat een aantal zeer nuttige functie van deze handleiding zal aantonen dat elke methode te gebruiken, en voordat we begonnen, om te begrijpen dat de methode van de magie, het helpt ze in actie te zien.Dus, laten we beginnen met een eenvoudige verzameling van de basis van de klasse.Hier, de definitie van categorie 2: apparatuur en accu 's.PHP apparaat (openbare. ///////- apparatuur; de naam van de dollar; ///////die in het bezit zijn van een batterij object de $gegevens = - (); ///////winkel diverse.In een reeks gegevens, in verband met de openbare middelen; ///////bezit van een in verband met de bescherming van de verbinding () {///////functies in verband met de externe netwerken in verband met de dollar - > = "middelen"; ECHO $dit > naam. "Verbonden.Php_eol;} disconnect () {///////bescherming van de afsluiting van het netwerk met de dollar - > = nul; ECHO $dit > naam. "Gebroken.Php_eol;}} {categorie batterijen van particuliere uitgaven = 0 dollar; de functie van setcharge (heffing element) {% = (int). De heffingen; als ($kosten < 0) {} elseif heffing = 0 dollar; ($kosten > 100) {% = 100;}, Dat - > de = dollar kosten;}}?>,, als de "methode" en "eigendom" klinkt vreemd voor je, wil je misschien bij het lezen van dit eerste doel, apparatuur, een naam, een batterij gegevens), en een aantal externe middelen aan.Ze zijn ook gebruikt voor de verbinding en de externe middelen.De batterij is opgeslagen in de particuliere eigendom van het voorwerp van de heffing, en er is een methode om heffingen vast te stellen. Deze les is dat je een fundamenteel begrip gerichte programma 's.Als de "methode" en "eigendom" klinkt vreemd, je zou willen lezen, die zijn zo nutteloos, maar zij voor elk een magische oplossing als een goed voorbeeld van.Nu hebben we onze eenvoudige klasse te creëren, we kunnen proberen een magische manier.,, de constructeurs & de verschrikkelijke, fabrikant en verschrikkelijke is als een object wordt gemaakt en vernietigd zijn.Een voorwerp is van "schade" was, was er niets meer over is, hetzij omdat de variabele vaststelling /toegewezen of script is klaar, __construct (), __construct (). De methode is de meest gebruikte methode voor de magie.Het is als een bezwaar is gemaakt, moet je doen wat - plek.Je kan hier een definitie van het aantal parameters, zal dit via de oprichting van het voorwerp van overdracht.De terugkeer van waarden zal door de nieuwe, trefwoord.In de fabrikant een uitzondering gooien stopt object creëren...De openbare functie __construct (batterijen voor de batterij, batterij, $) {///////de batterij alleen doeltreffend kan worden het voorwerp van dollar - > batterij dollar; de dollar - > naam:.; ///////aangesloten op het netwerk van dollar - > verbinden (;) ///////).De verklaring van de fabrikant methode "), om te voorkomen dat externe particuliere" kan rechtstreeks tot een object code, we hebben verklaard dat een fabrikant die twee parameters, een batterij en een naam.De fabrikant wordt voor elk object, moet de functie en werking van de eigenschappen, de methoden, de verbinding ().De fabrikant kan je ervoor zorgen dat er een object in het reeds met alle eisen, en dat de fabrikant: verklaring van de code "privé" rechtstreeks tot voorwerp kan worden voorkomen.Dit soort beperkingen voor het creëren van een interne gevallen bestaan, kan het aantal objecten is erg handig, op de Top van de fabrikant, hier is je van het creëren van een apparaat genaamd "imago": $= nieuwe toestellen (nieuwe batterij (), "imago"); ///////in Kaart te brengen in verband met de ECHO $apparatuur * de naam van het beeld;; ///////, zoals je kan zien, is in feite door klasse parameters aan de fabrikant van de methode.Kan je ook vertellen dat die methode wordt toegepast, en de naam, de eigenschap te vullen.Hier is wat er gebeurd: $= nieuwe toestellen (nieuwe batterij ()); ///////PHP waarschuwing: het gebrek aan resultaten: de parameters van de apparatuur: __construct (2), __destruct (), de naam zegt het al, __destruct (). De methode wordt genoemd, het doel is vernietigd.Hij accepteert geen parameters, zoals gewoonlijk gebruikt voor de uitvoering van een databank die dicht bij operaties.In ons geval, zullen we gebruik maken van het netwerk te breken...De openbare functie __destruct () {/Verbreek de dollar - > disconnect (); de ECHO $dit > naam. "Vernietigd worden.Php_eol;) ///////...}, in het geval van een dergelijke verschrikkelijke, dit is gebeurd op een materieel object vernietigd, nieuwe uitrusting: $= (nieuwe batterij (), "imago"); ///////in kaart te brengen in verband met een (eenheid); ////////beeld worden losgekoppeld van het beeld, hier, we hebben vernietigd. Het gebruik van UNSET (,).In het voor de vernietiging van de verdelger bellen, disconnect (), de methode en de afdruk van een boodschap, zie je commentaar op de eigendom, noot:.,,., PHP versie van "of" is niet hetzelfde als de meeste andere taal, hoewel ook resultaat kan worden bereikt, die in het kader van Die magische methode. Voor de behandeling van eigenschappen als je probeert toegang te krijgen tot de toegang tot de definitie van een eigenschap die bestaat niet (of niet beschikbaar).Ze kan worden gebruikt voor het creëren van een pseudo - attributen.Dit is de zogenaamde overbelasting in __get (PHP), en, __get (). De methode wordt genoemd, om toegang te krijgen tot de code niet toegang kan krijgen tot de eigenschap.Het aanvaarden van een parameter, het is de naam van de eigendom.Het moet de terugkeer van een waarde die wordt beschouwd als de waarde van de eigenschap.Weet je nog, in onze apparatuur van de gegevens in de klas, attributen?We zullen deze pseudo - eigenschappen als de opslag van gegevens van de reeks elementen, kunnen we de categorieën gebruikers door middel van toegang, __get ().Hier is wat:, apparatuur (////////////////////////////////////////////////////////////////...De openbare functie __get ($) {///////inspectie van bepaalde essentiële bestaan in onze generator als (array_key_exists (., de dollar - > gegevens)) {///////en van de generator terug naar waarde $- > gegevens [naam]}} terug van nul dollar;; ///////...}, gebruikte, __get (). De methode is uitbreiding van de toegang tot de controle door het creëren van een "lezen" eigenschap.In onze cel als voorbeeld, het is een privé - eigendom.Kunnen we privé - eigendom, $kosten om te lezen van de code, maar er is niets veranderd.Code ziet er als volgt uit:, batterijen (particuliere uitgaven = 0 dollar; de functie van __get ($) {als lid is ($- > $) {terug. - $> ///////.} terug van nul;}.In dit geval, let op het gebruik van variabele variabelen voor de dynamische toegang tot eigendom.Uitgaande van de waarde voor de gebruiker is, de naam, de dollar >., betekent dat de dollar - > de gebruikers, __set ().,,, __set (), de methode is om de code te veranderen, de waarde van de eigenschap is niet toegankelijk.Het aanvaarden van twee parameters, namelijk de naam en de waarde van de eigenschap."Hier" pseudo - variabelen "- in onze apparatuur: apparatuur (///////////////////...De openbare functie (de waarde van de dollar. __set, met de naam) {///////- sleutel als de dollar - > gegevens [naam] = dollar waarde ///////.}.__isset ()), en, __isset (). De methode wordt genoemd, is de code, (), dat is niet toegankelijk voor de eigenschap.Het aanvaarden van een parameter, het is de naam van de eigendom.Het moet de terugkeer van een boer waarde die het bestaan van een waarde.Weer met onze reeks variabelen, wat is dat voor een blik, soorten apparatuur: ///////////////- /////////////////////////of...De openbare functie __isset ($) {///////kun je ook is (hier terug array_key_exists ($), de dollar - > gegevens) ///////.}.__unset ()), en, __unset (). De methode wordt genoemd, code proberen, UNSET (), die is niet toegankelijk voor de eigenschap.Het aanvaarden van een parameter, het is de naam van de eigendom.Hier is onze blik:, eersteklas uitrusting (///////////////...De openbare functie __unset ($) {///////UNSET () een reeks elementen die onze ($- > gegevens [naam] dollar) ///////.}.}, in actie. De eigenschap, hier is de eigenschap van alle relevante magie, en we hebben aangekondigd, soorten apparatuur: //////////////- ////////////////////////////////////////////////////////////////////////////////////////...- (de) gepubliceerde gegevens van diverse dollar /winkel.Gegevens van het station...De openbare functie __get ($) {///////inspectie van bepaalde essentiële bestaan in onze generator als (array_key_exists (., de dollar - > gegevens)) {///////en van de generator terug naar waarde $- > gegevens [naam] dollar;} terug van nul; openbare functie __set (.), de waarde van de dollar) het gebruik van {naam van cruciaal belang als) ///////- $> gegevens [naam] = de waarde van de dollar;} {__isset ($) ///////kun je ook is (hier terug array_key_exists ($), de dollar - > gegevens); openbare functies) __unset ($)) {///////UNSET (worden) de elementen van onze instellingen ($- > gegevens [naam] dollar) ///////.}.Met de magie van boven, hier is als we proberen toegang te krijgen tot een van de eigenschappen van de naam van de situatie die op het moment.Weet je nog, zonder een echte naam, de dollar, de aangifte van goederen, maar je weet het nooit, niet zien in de categorie code voor apparatuur > gebruiker = "Steve"; ECHO $apparatuur > de gebruikers; /Steve, we hebben en met succes te zoeken op een niet in. Waarde.Dan is het geheugen waar?En print_r ($apparatuur > gegevens); (*) [de] = > Steve) * /, zoals je kan zien, de dollar, gegevens bevat, nu we de waarde van onroerend goed een "naam" elementen, var_dump lid is ($apparatuur > gebruiker); ///////booleaanse (echt), en het is de telefoon, de resultaten, de valse eigendom is (), UNSET ($apparatuur > de gebruikers); var_dump lid is ($apparatuur > gebruiker); ///////bool een (pseudo), is niet Meer dan valse resultaten.Dat is het, we hebben hier een lege data -, print_r ($apparatuur > gegevens); * * * * * * * * - (), dat de tekst /, voorwerpen, soms moet je het omzetten van een object in een string vertegenwoordiging.Als je wil alleen afdrukken van een object, krijgen we een fout, als volgt: $= nieuwe toestellen (nieuwe batterij (), "imago"); de ECHO $apparaat; ///////PHP resultaten: vangst fatale fout: de apparatuur niet kan worden omgezet in een reeks doelstellingen, __tostring, __tostring ((),) wordt genoemd, de code probeerde als een touw.Het aanvaarden van een parameter, en een string.Dat laten we omschreven doel te worden vertegenwoordigd.In ons geval, creëren we een korte samenvatting: apparatuur {...De openbare functie () {///////__tostring we verbonden?In verband met de = lid is ($- > verband)? "In verband met: "gebroken, ///////hoeveel gegevens, hoeveel hebben we er?Schrijven = tellen ($- > gegevens); ///////het samen terug naar deze > naam. "Is ".$in verband metEn ".Dollar.In het geheugen van de projecten.Php_eol;}.}, met gebruikmaking van de methode van de definitie van, en dat is wat we proberen te drukken materieel object: $= nieuwe toestellen (nieuwe batterij (), "imago"); de ECHO $apparaat; ///////het imago en het geheugen 0 materieel object is nu een korte samenvatting bevat De naam, de vertegenwoordigers van de status, en de opslag van de projecten (PHP), __set_state (5.1), statische, __set_state (). De methode (beschikbare PHP versie 5.1) wordt genoemd, var_export (), functie is het object.En var_export (), is de functie van een variabele PHP code.Deze methode omvat de waarde van de eigenschap die het voorwerp van associatieve).Om het eenvoudig te houden, in onze groep in het gebruik van het gebruik van batterijen, (////////...De functie van de statische __set_state (-) {% dst = nieuwe zelf (); $dst - > setcharge rekenen'charge "[]); het voorwerp terug;) ///////...}, onze methode alleen het creëren van haar moedermaatschappij een voorbeeld van de klas, en die voor de door de waarde van de in de reeks.Door deze methode omschreven, en dat is wat we met de apparatuur, var_export (), de deelnemers: $= nieuwe toestellen (nieuwe batterij (), "imago"); var_export ($apparatuur > batterij); * de batterij:: __set_state (array ("het" = 0 >, * * * * * * *)) /eval ($batterij = ".Var_export ($apparatuur > batterij, echt). "; "); var_dump ($batterij); doel(batterij) /* 3 (1) {[" heffing: particuliere "] = > int (0)} * /, ten eerste dat het gebeurt, namelijk, var_export (), simpel telefoontje, batterij: __set_state ():,.Het tweede dat we met succes de batterij, het klonen van herstructurering., voorwerp, doel, bij verstek, door in de referentie.Dus, worden toegewezen aan een andere variabele object, geen kopie van het object, alleen voor hetzelfde doel het creëren van een nieuw visum.Met het oog op de echte kopie van een object, we moeten het gebruik van "kloon", "het sleutelwoord", het "met" strategie is ook van toepassing op een object in een voorwerp.Zelfs als we het klonen van een object dat er een object niet worden gekloond.Dus, zullen we met dezelfde doelstelling 2 een object.Hier is een voorbeeld van: $= nieuwe toestellen (nieuwe batterij (), "imago" voor $); 2 = kloon apparaat; apparatuur > batterij > setcharge (65); ECHO $- 2 - > batterij > heffing; ///////65, Hier gaan we het klonen van een materieel object.Weet je nog al het materieel object met een batterij.Een apparaat het klonen van dezelfde batterij, we doen de batterijen voor de uitrusting van de wijzigingen in de cel voor 2 dollar, __clone () (), en __clone methoden kunnen worden gebruikt om dit probleem op te lossen.Na het optreden van het klonen, bekend als het klonen van de kopie van het object.Dit is je klonen een object waar kinderen, apparatuur {...De openbare functie __clone () {///////- onze batterij object dollar - > - = het klonen van dollar - > batterijen;}.Deze verklaring van de methode), kunnen we nu de kloon apparaat heeft z 'n eigen cel, apparatuur = nieuwe apparatuur (nieuwe batterij ($), "imago" voor $); 2 = kloon apparaat; apparatuur > batterij > setcharge (65); ECHO $2 - > de batterij >;; ///////0, een apparaat van de veranderingen zijn niet van invloed op de andere cel.,, het voorwerp van de bijgehouden, zo is geen gegevens in een string.Dat kan worden gebruikt om het object is opgeslagen in een bestand of een databank.Als je zo de opgeslagen gegevens, dan heb je het oorspronkelijke doel en als het origineel.Een reeks van problemen is, hoewel niet alles kan worden bijgehouden, zoals de databank.Gelukkig is er een magische manier, laten we dit probleem aan te pakken, __sleep (), __sleep (). De methode is ingeroepen, de problemen (), de functie wordt genoemd.Niet aanvaarden dat de parameters en de terugkeer van alle eigenschappen moeten worden bijgehouden).Je kan ook een taak nog niet voltooid of goedgekeurd, kan in deze methode noodzakelijk is. Om te vermijden dat:,, de vernietiging van __sleep (,), omdat deze van invloed zullen zijn op het leven van de voorwerpen, je kan niet altijd het voorbeeld van de apparatuur, in onze externe middelen, in verband met De eigenschap dat niet bijgehouden.Dus, __sleep (), met uitzondering van de methode alleen terug, $verbinding, alle eigenschappen van netwerken, apparatuur (openbare. ///////- apparatuur; de naam van de dollar; ///////die in het bezit zijn van een batterij object de $gegevens = - (); ///////winkel diverse.In een reeks van gegevens in verband met de $houdt een aantal middelen; /////////verbonden...De openbare functie __sleep () {///////lijst van de eigenschap voor een terugkeer van de generator (naam, "batterij", "gegevens") ///////.}.We __sleep (}), is een lijst van de namen van de eigenschap moet worden gehandhaafd, __wakeup (), __wakeup (). De methode wordt genoemd, unserialize (), de functie wordt genoemd.Hij accepteert geen parameters, ook niet terug moet iets.Met het voor de wederopbouw van een databank of middelen worden bijgehouden. Op onze voorbeelden van apparatuur, moeten we ons in verband met de wederopbouw van de door een beroep te doen op ons, de verbinding (), de methode, de apparatuur (//...De openbare functie () {///////__wakeup aangesloten op het netwerk van dollar - > verbinden (;) ///////).Deze laatste methode), zware, methoden voor de verwerking van de methode is.Dit is het concept van de zware eigenschap van dezelfde methode (,, __set () (), __get, enz.), maar bij toepassing van een methode, __call () (), __call, bekend als de code proberen te bellen, of toegang tot de methode bestaat niet.Het aanvaarden van twee parameters: de naam genoemd en voor een reeks parameters.Je kunt gebruik maken van de informatie om de kinderen, op dezelfde manier, bijvoorbeeld, in dit geval, de aandacht call_user_func_array (), het gebruik, de functie.Deze taken kunnen we in een reeks in de opslag van de parameters van de functie van dynamische vermeld (of methode).Het eerste teken van de parameter in functie.In de naam van de omstandigheden voor de eerste parameter is een installatie, met inbegrip van een klasse van de naam of het voorwerp en de naam van de eigendom.Ten tweede, in ons geval, zullen we onze aanpak noemen we door middel van de overdracht van de eigendom (we hebben aangenomen is een voorwerp).We zullen terugkeren naar de resultaten direct terug naar de code...De openbare functie __call (., $parameters) {///////ervoor te zorgen dat onze kinderen object heeft deze methode als (method_exists ($- > in verband met de $)) {///////noemen ons kind terug van een object call_user_func_array (array ($- > in verband met de $), voor de parameters);} terug van nul;} ///////...Deze methode kan}, bel, idontexist (), de methode: $= nieuwe toestellen (nieuwe batterij (), "imago"); $apparatuur > idontexist () (); ///////__call toezending van dit apparaat verbonden - > > idontexist __callstatic () (), (PHP 5.3), __callstatic (), (de beschikbare PHP 5.3) hetzelfde is, __call (), met uitzondering van het wordt genoemd, de code proberen toegang te krijgen tot de methode of niet bestaan, in de context van een statische, in ons geval, het enige verschil is dat wij de methode van de verklaring, statische verwijzing naar een klasse, onze naam in plaats van een object, apparatuur (//...De functie van de statische __callstatic (., $parameters) {///////- laten we heeft deze methode als (method_exists ("verband".)) {///////call_user_func_array statische bel terug naar de klas (installatie ("verband".), $parameters);} terug van nul;) ///////...Deze methode kan proberen te noemen), statische, idontexist (), een methode voor de idontexist:,::; ///////__callstatic () () de toezending van deze verbindingen:: idontexist (), het gebruik van voorwerpen, de functie, soms kan je het wil gebruiken als functie van Een object.Om gebruik te kunnen maken van een object, als een functie van de functie als parameter om je als je in de andere talen (PHP), __invoke (5.3), en __invoke (), (PHP versie beschikbaar is wanneer de code 5.3) te gebruiken als functie van het voorwerp.Bij deze methode wordt gebruikt voor de definitie van een parameter die functie van de parameters.In ons geval, zullen wij in het kort de afdruk van de parameters van het ontvangen, apparatuur (////////////////////////////////////////////////////////////////////////////////////...De openbare functie __invoke ($gegevens) (ECHO) ///////gegevens;...}, zoals hierboven gedefinieerd, daar maken we gebruik van de apparatuur als een nieuwe functie: $= apparaat (nieuwe batterij (), "imago"); $(test apparaat "); ///////- equivalent tot apparatuur > __invoke (test) ///////Output: test, __autoload (bonus:), is dit niet een magische oplossing, maar het is nog steeds zeer nuttig.__autoload () en de werking van de automatische genoemd, als een soort bestaat niet.Dat betekent dat je nog een laatste kans te geven om te laden voordat je het script niet met dergelijke verklaringen van de documenten.Het is nuttig, omdat je niet altijd voor het laden van een klasse van elk geval, je moet het aanvaarden van een parameter, de functie: verwijzing naar de naam van de klas.In een document dat de naam "klasse moet elke klas. Klasse. Php" in de "ondernemingen". De gids.Hier is je automatisch laden. Functie:, __autoload ($class_name) {% class_name = strtolower ($class_name); include_once. "/. /."Class_name dollar. "De klas. Php;},, conclusies, magische methode is zeer nuttig en flexibele toepassing van het kader voor de ontwikkeling van een krachtig instrument.Ze hebben PHP object dichter bij die in de andere taal, kun je een kopie van hun nuttige functie.Kan je lezen op bladzijde PHP handboek magische manier hier.Ik hoop dat deze handleiding is nuttig en duidelijk concept.Als je vragen hebt, aarzel dan niet om het te vragen, in de toelichting.Bedankt voor het lezen.
- een magische manier in PGB
Previous:Het creëren van een uittreksel van
Next Page:De winnaars: steun en