in de reflectie, de reflectie in de PHP,,,,,,,,,,,, 49 - eenheid,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen.,, die meestal gedefinieerd als een programma in het kader van de uitvoering van de controle zelf, capaciteit, wijziging van de logica.In minder technische voorwaarden, de weerspiegeling is van een object dat je vragen over de kenmerken en de methode van het veranderen van deze leden (en zelfs particuliere).In deze handleiding zullen wij graven in deze moet, als het kan nuttig zijn, en een kleine geschiedenis, in het tijdperk van de programmering van de taal, de vergadering.De assembler schrijven in de computer van de interne registers.Het bestaat, de methode en de waarden, kan te allen tijde te controleren, door het lezen van het register.Zelfs meer, je kan een verandering van de procedure, en dit is door een eenvoudige wijziging van de werking van het register.Het moet een relevante operationele programma 's van de kennis, maar het is in wezen een reflectie, als een leuk speeltje, het gebruik van reflectie, maar maak er geen misbruik van. Als hogere programmeertaal (zoals CO2), de reflectie is verdwenen.Dit is later het opnieuw invoeren van de gerichte programma 's, vandaag de meeste programmeertaal reflectie kan worden gebruikt.De taal van de statische aard, zoals Java, weinig problemen op.Ik denk dat interessant, maar is een dynamische type taal (zoals PHP of ruby) was gebaseerd op de reflectie.Geen reflectie, het concept van de typen eend waarschijnlijk niet mogelijk is.Als je een object te sturen naar een ander voorwerp (bijvoorbeeld een parameter), die niet weet dat het voorwerp van de structuur en de aard van het voorwerp.Het kan doen, is het gebruik van reflectie kan worden bepaald die het object methode.,, een eenvoudig voorbeeld geven. Het is een weerspiegeling van de universele PHP.In feite, zijn er een paar gevallen, kan je het gebruiken, en wist het niet eens.Bijvoorbeeld, nettuts.php require_once /bewerken. Php; NETTUTS {functie publishnextarticle () {% bewerken = nieuwe redacteur (John zeggen); $editing > setnextarticle ('135523 "); redacteur ($> publiceren);}},,, /editor.php: soort bewerken (particuliere $van het publiek; de dollar; de functionele __construct ($) {% dit > naam van de functie setnextarticle =.;) (%) {% dit > van tijd tot tijd dollar;} openbare functies te kopen () {///////de kwestie van logica naar hier terug waar;}}, in deze code, we hebben een lokale gestart met een variabele een bekende soorten rechtstreeks beroep.Het creëren van opmaak, publishnextarticle (), is het duidelijk dat dollar, bewerken, aard van de variabele is de redacteur,.Geen reflectie nodig is, maar laten we de invoering van een nieuwe soort, bekend als de manager, en /manager.php: require_once ". /bewerken. Php; require_once". /NETTUTS. Php; de functie van manager {dojobfor (datetime datum dollar) {als (nieuwe datetime ()) - > gettimestamp () > die datum > gettimestamp ()) {% bewerken = nieuwe redacteur (John zeggen); $NETTUTS = nieuwe nettuts (); $Nettuts - > publishnextarticle (ED);}}}, de volgende, tot wijziging van NETTUTS, zoals dit: ///////nettuts.php klasse, NETTUTS (functie publishnextarticle (uitgever) {% editing > setnextarticle ('135523 "); redacteur ($> publiceren);}}, nu NETTUTS, helemaal geen relatie, de redacteur.Het bevat het document, dat niet zullen zijn, het zelfs niet weten dat het bestaat.Ik kan door iedere soort, publishnextarticle (), - methoden en - codes werken.,,,, en je kunt zien dat deze grafieken, NETTUTS, maar rechtstreeks verband, manager.Manager, heeft het gemaakt, dus manager, hangt af van de nettuts,,.Maar, NETTUTS, er is geen relatie, redactioneel bewerken,,, is alleen met de manager, in het gebruik, de redactie, de NETTUTS, voorwerp, dus < < het gebruik van > > en een vraagteken.Tijdens de operatie, de aanvaarding van doel en dat PHP controleren, dat tot stand is gekomen, setnextarticle () (), publiceren,,, het voorwerp van informatie door de leden van een object dat PHP, kunnen we de details.Laten we de oprichting van een phpunit test om te helpen ons te oefenen onze code: ///////reflectiontest.php ", require_once. /bewerken. Php; require_once". /NETTUTS. Php; uitbreiding van de functie van reflectiontest phpunit_framework_testcase {testitcanreflect () {% bewerken = nieuwe redacteur (John zei $nettuts (= nieuwe); tut TUT - dollar); > publishnextarticle (ED);}}, nu nog een var_dump (), NETTUTS:,,,, /nettuts.php klasse NETTUTS {functie (ED) publishnextarticle {% editing > setnextarticle ('135523 "); redacteur ($> gezien reflectionclass var_dump (nieuw); ($); redacteur)}}, testen en in de produktie plaatsvindt: 3.6.11 magie zien, phpunit Sebastian Bergman.(reflectionclass). DoelÅ (1) {[naam] = >. (6) "bewerken"}: 0 seconden, geheugen: 2.25mb goed (een test, 0 beweringen over), we hebben een naam, die eigendom is van de oorspronkelijke redactie, $variabele:,, bewerken, maar Dat is niet veel informatie.Redacteur?Nettuts.php klasse NETTUTS {functie, /publishnextarticle (ED) {% editing > setnextarticle ('135523 "); $redacteur > publiceren (); de reflector = nieuwe reflectionclass dollar (ED); var_dump (spiegel > getmethods ());}}, in dit deel van de code, we verdelen het. De aanleg van de variabele voor de reflectie, dus kunnen we nu een methode.En reflectionclass, blootgesteld aan een groot aantal methoden kunnen worden gebruikt voor het verkrijgen van een object van de informatie.Op een manier is, getmethods (), die weer een serie bevat de informatie voor elke methode, 3.6.11 Sebastian Bergman phpunit.- (3) {[0] = > &voorwerp (reflectie) 196 (2) {[naam] = > serie (11) "" "" __construct [] = >. (6) "bewerken"} [1] = > &voorwerp (reflectie) 195 (2) {[naam] = > serie (14) "" "" setnextarticle [] = >. (6) "bewerken"} [2] = > & doel (Golf)Â (2) {[naam] = >. (7) de "post" "soort" [] = >. (6) "bewerken"}}: 0 seconden, geheugen: 2.25mb goed (een test van een bewering, 0), een andere methode, getproperties (), prestaties, (ook al is persoonlijk van aard.Doel van phpunit 3.6.11 Bergman, Sebastian..array (2) {[0]=> & voorwerp (ReflectionProperty) #196 (2) {["naam"]=> reeks (4) "naam" ['klasse']=> reeks (6) "...") [1]=> & voorwerp (ReflectionProperty) #195 (2) {["naam"]=> (9) de string "articleId" ['klasse']=> reeks (6): "..."}} 0 seconden,: 2.25Mb - (1 - 0 assertions), de elementen in de gevallen van getMethod terug, (), en, getProperties (), zijn van het type, ReflectionMethod, en, ReflectionProperty 1); deze voorwerpen zijn, we useful:, ///////Nettuts.php klasse Nettuts {functie publishNextArticle ($editor) {$editor-> setNextArticle ('135523'); $editor-> publiceren (); ///////call te publiceren. $reflector () =De nieuwe reflectionclass (ED); publishmethod dollar = spiegel > ('publish "); publishmethod dollar - > roept de (ED); ///////tweede telefoon te kopen ()}}, we gebruiken hier, getmethod (), herstel en de publicatie" voor de lijst van De resultaten; is de reflectie, het voorwerp.Dan, we bellen, op (), door middel van het voor de montage van object voor de uitvoering van de redactie publiceren (), één keer, het proces is in ons geval eenvoudig, want we hebben een, redacteur van de overdracht van voorwerpen, de beroepen ().In sommige gevallen kunnen we er een paar, de redactie, de doelstellingen, geef ons de luxe kiezen welk object.In andere gevallen kunnen we geen doelstellingen op het werk, in dit geval, moeten we de toegang tot een reflectionclass,,., laten we wijzigen, bewerken, publiceren (), blijkt dat de dubbele bellen voor: ///////editor.php, klasse {[redacteur...De openbare functie] publiceren () {///////de kwestie van logica hier ECHO ("n"); terug waar;}}, en de nieuwe produktie - en door de 塞巴斯蒂安·伯格曼 phpunit 3.6.11.De tijd: 0 seconden. Hier, 2.25mb goed geheugen: (1 0 een test, een bewering), manipulatie van gegevens, kunnen we ook bij de uitvoering van de code.Het wijzigen van een privé - variabelen, geen openbare - setter?Laten we er een methode, bewerken, het herstel, het bewerken van naam: ///////editor.php soort redactie {naam van meer dan $particuliere; de functie __construct ($) {% dit > naam:.;} [...De functie van geteditorname] () {terugkeer dollar - > naam en}}, deze nieuwe methode wordt toegepast, geteditorname (), en eenvoudige waarden van particuliere,.,.Bij de oprichting, $, de naam van de variabele is vastgesteld, en hebben we geen gemeenschappelijke methode, laten we het veranderen.Maar we kunnen het gebruik van reflectie om toegang te krijgen tot deze variabele.Je kunt proberen het duidelijker methoden: nettuts.php klasse NETTUTS {functie, /publishnextarticle (ED) {var_dump ($editing > geteditorname ()); $reflector = nieuwe reflectionclass (ED); editorname dollar = spiegel > getProperty (naam); $editorname - > getvalue ($editing);}}, zelfs als deze produktie, var_dump (), de waarde van de lijn, het gooien van een fout te denken: 3.6.11, en halen de waarde, phpunit Sebastian Bergman.(8) het akkoord "anoniem": 0 seconden, 2.50mb geheugen: 1: 1) de fouten reflectiontest:: testitcanreflect reflectionexception: geen toegang tot niet - leden: de namen van Edit: [...] van [...] /PHP /herkomst /NETTUTS reflectie. PHP:13 [...] /PHP /herkomst /test /reflectiontest bezinning: 13. Php /USR /bin /VI PHPUnit:46 gefaald.Test: 1, beweringen: 0, fout: 1, om dit probleem op te lossen, moeten we de vraag stellen, reflectionproperty, gaf ons de toegang tot particuliere variabelen en methoden, klasse /nettuts.php NETTUTS {functie publishnextarticle (ED) {var_dump ($editing > geteditorname ($)) = nieuwe reflectionclass reflector ($uitgegeven;); editorname dollar = spiegel > getProperty (naam); $editorname - > setAccessible (echt); var_dump ($editorname - > getValue (ED));}}, telefoon, setaccessible (), en de bal, echt, vingervlugheid: 塞巴斯蒂安伯格曼, phpunit 3.6.11.(8). Het touw "anoniem". (8) "anoniem": 0 seconden, geheugen: 2.25mb goed (een test van een bewering, 0), zoals je kunt zien, hebben we de privé - variabelen te lezen.Eerste regel van de eigen doelstellingen, geteditorname (), methoden, en de tweede uit reflex.Maar veranderen in een privé - variabele waarde is?Gebruik: setvalue (), en /nettuts.php klasse, NETTUTS {functie publishnextarticle (ED) {var_dump ($editing > geteditorname ()); $reflector = nieuwe reflectionclass (ED); editorname dollar = spiegel > getProperty (naam); $editorname - > instellingen voor toegang tot (echt, editorname); - > setValue ($, redacteur van 'Mark Twain); var_dump ($editorname - > getValue (ED));}}, dat is alles.De code verandert "anoniem" naar "van Mark Twain. Phpunit 3.6.11 Bergman, Sebastian.(8). Het touw "anoniem". (10) 'Mark Twain ": 0 seconden, geheugen: 2.25mb goed (een test van een bewering, 0), die indirect, het gebruik van een PHP in functie van het indirecte gebruik van reflectie een is, call_user_func (), de functie, het call - back -, call_user_func (), de functie van een installatie, aanvaard: de eerste elementen wijzen op een object, een tweede methode is de naam.Je kan voorzien in een facultatieve parameter, en vervolgens aan de methode wordt genoemd.Bijvoorbeeld: de functie van klasse NETTUTS, /nettuts.php {publishnextarticle (ED) {var_dump ($editing > geteditorname ()); $reflector = nieuwe reflectionclass (ED); editorname dollar = spiegel > getProperty (naam); $editorname - > setAccessible (echt); editorname dollar - setValue > ($, redacteur van 'Mark Twain); var_dump ($editorname - > getValue (ED)); var_dump (call_user_func (array (ED, "geteditorname"))); de produktie van de volgende}}, dat de waarde van de juiste code herstel: phpunit 3.6.11 Bergman, Sebastian.(8). Het touw "anoniem". (10) 'Mark Twain' string 'Mark Twain "(10): 0 seconden, geheugen: 2.25mb goed (een test van een bewering, 0), het gebruik van een van de waarden van de variabelen, een ander voorbeeld is de waarde voor indirecte reflectie noemen die in een een variabele, maar niet direct bellen.Bijvoorbeeld: de functie van klasse NETTUTS, /nettuts.php {publishnextarticle (ED) {var_dump ($editing > geteditorname ()); $reflector = nieuwe reflectionclass (ED); editorname dollar = spiegel > getProperty (naam); $editorname - > setAccessible (echt); editorname dollar - setValue > ($, redacteur van 'Mark Twain); var_dump ($editorname - > getValue (ED)); en methodename = "geteditorname"; var_dump ($editing > methodname () dollar);}}, van deze code tot dezelfde resultaten, zoals de voorgaande voorbeelden.PHP een eenvoudige vervanging van variabelen die het vertegenwoordigt. De methode.Het gebruik van de naam van de soort of zelfs in de variabelen voor de oprichting van het voorwerp, het kan zelfs, als we het gebruik van reflectie?En nu, hebben we een van onze technische details, terwijl we gebruik moeten maken van reflectie?Hier zijn een paar scènes:,, de dynamische aard, is niet mogelijk zonder rekening te houden met de BOB.,,, naar code van de plaats van de methode en de methode, die de voltooiing van reflectie.,, phpunit, hangt in grote mate af van de reflectie, andere imitatie kader., web - kader, in het algemeen, met de verschillende doelstellingen.Het gebruik van het model van een klasse, de bouw van het doel van de mening van de en nog veel meer.De reflectie in de laravel gewicht gebruikt, afhankelijk van de programmering, de dollar. Als we een laatste voorbeeld, verborgen is rekening te houden met de code analyse,.,, het gebruik van reflectie te begrijpen, je code, de laatste gedachten, als een leuk speeltje, het gebruik van reflectie, maar maak er geen misbruik van.Als je het onderzoek van veel dingen, die zijn duur, het is mogelijk dat je de structuur van het project en de ontwerp ingewikkeld.Stel ik voor dat je het gebruikt, het eigenlijk geef je de voordelen, of als je geen andere keuze. Ik persoonlijk, ik gebruik alleen een aantal voorbeelden van de meest voorkomende gebruik van documenten, het gebrek aan de derde module.Ik vind dat je vaak op een vergelijkbaar is met het voorbeeld van de code.Roept de geschikte methode is eenvoudig als je MVC responsvariabele bevatten "toevoegen" of "verwijderen" waarden, dank u voor te lezen.,
PHP
Next Page:V.q.p.r.d.