, geld van de juiste methode: de juiste methode om de waarde per eenheid van vertegenwoordiging van de,,,,,,,,,, delen, 10 - eenheid,,,,,,, de delen van het netwerk, maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen. En geld door Martin, mode, Fowler en gepubliceerd op ondernemingen toepassing van de definitie van architectuur, de vertegenwoordigers van de waarde per eenheid is op een goede manier.Het heet geld in de vorm van financiële aspecten zoals het in, we zullen het zijn hoofdzakelijk gebruikt in de context van dit gebruik maken van de persoonlijke beschermingsmiddelen.,,,, een paypal account, ik weet het niet te betalen voor het bereiken van, maar ik denk dat dit een goed idee is, om het voorbeeld van De functie.Laat me je vertellen, ik bedoel, mijn schat rekening met twee valuta 's: de dollar en de euro.Het zal ze uit elkaar, maar ik kan in elke valuta krijgt het geld, ik kan zien dat ik in totaal een bedrag van één munt, kan ik in geen van de winning.Met het oog op de winning van dit voorbeeld, dat in een monetaire en automatische overdracht is dat te doen, en als bepaalde valuta kleiner is dan moeten we de overdracht, maar er is nog genoeg geld in andere valuta 's.Tegelijkertijd zullen we beperkt tot gevallen van twee valuta 's, maar een rekening.,,, als ik een rekening te creëren en het gebruik van voorwerpen, ik wil het nog een rekening, de functie testitcancrateanewaccount () {% dit > assertinstanceof ("de rekening", een nieuwe rekening (123);} Dit zou falen, omdat we geen les, maar.Rekeningen, {}, nou, geschreven in een nieuwe, "rekening. Php documenten", en verzocht om de in de test, laat maar door.Dit alles is echter alleen maar om z 'n goed idee.Ik wil de rekening, id, functionele testitcancrateanewaccountwithid () {% dit > dat het (123 (nieuwe rekeningen (123) - > getid ());}, ik ben echt veranderd in een test.Geen reden om het niet te laten de eerste.Het leven, en dat betekent dat ze me gedwongen om na te denken, rekening houdend met de klasse en het in feite te creëren.We kunnen nu gaan. Een privé - rekening ($; de functie __construct ($) {$this-> id = $;} openbare functie getId () {terug $this-> id;}}, de test is die en, rekening te houden van wat ze wil, is een echte Currencies.,,, gebaseerd op Ons paypal gebruikt om deze spectra we kunnen, wil "A primary and a, II. Voor onze particuliere $account; beschermde function setup () {$this-> rekening = nieuwe rekening (123);} [...] functie testItCanHavePrimaryAndSecondaryCurrencies () {$this-> account-> setPrimaryCurrency (" EUR "; $this->); account-> setSecondaryCurrency ('USD'); $this-> (installatie ('primary'; dat het =>'EUR','secondary'=>'USD'), $this-> account-> getCurrencies ())Nu de test;}, dwingen ons schrijven de volgende code, rekening (particuliere $; particuliere primarycurrency dollar; particuliere secondarycurrency dollar; [...] functie setprimarycurrency (in dollars) {% dit > primarycurrency = dollar munt;} functie setsecondarycurrency (in dollars) {% dit > secondarycurrency = dollar munt;} functie terug - getcurrencies () {("grote" = > de dollar - > primarycurrency "secundaire" = > de dollar - > secondarycurrency);}}, in de loop van de tijd, we houden het geld als een aaneenschakeling van.Dit kan in de toekomst veranderen, maar we zijn er nog niet, geef me het geld. Dat is de reden, de eindeloze vertegenwoordigt niet de waarde van geld als een eenvoudige.Die operatie?Wie?Wat is het monetaire gedeelte?We moeten er 100 of 1000 cent in de valuta 's, een exotisch?Oké, dit is dat we moeten voorkomen dat we een ander probleem.De verdeling van de punten niet kan?Te veel en exotisch probleem met geld, werk geschreven in code, dus zullen we direct naar de wijze op te lossen, geld.Dit is een zeer eenvoudige wijze, heeft grote voordelen en vele gevallen, niet in de financiële sector.Wanneer je moet representatief zijn voor een waarde per eenheid die moet je gebruik maken van dat model.En dan, waarin alle rekenkundige waarde ten opzichte van de munt."De staat ("), is een speciale functie, in het bijzonder de som van de twee of meerdere begunstigden worden verdeeld. Dus, als een gebruiker, geld en ik hoop dat ik tijdens de test doen, moneytest uitbreiding: klasse phpunit_framework_testcase {functie testwecancreateamoneyobject () {% geld = nieuwe monetaire (100, monetaire:: USD ());}}, maar het zal niet werken.We hebben het geld nodig, en de munt.Zelfs meer, we moeten geld gebruikt, geld.Dit is een eenvoudige, dus ik zal niet voor de test het nu.Ik weet zeker dat de meeste van de code, die het kan voor mij. En centfactor dollar munt (particuliere; particuliere stringrepresentation dollar; privé functie __construct (centfactor dollar stringrepresentation) {% dit > centfactor = centfactor dollar; de dollar - > stringrepresentation = $stringrepresentation; openbare functies () {} getcentfactor terugkeer dollar - > centfactor;} functie terug getstringrepresentation () {} stringrepresentation dollar - > statische functie terug te keren; nieuwe zelf USD () {(100 "dollar");} statische functie terug van nieuwe eigen EUR () {(100, "euro");}}, dat is genoeg om ons voorbeeld.We hebben twee statische functies, de dollar en de Euro - valuta.Bij de praktische toepassing, misschien hebben we een gemeenschappelijke parameters en de belasting van alle valuta 's van de fabrikant van de databank of, beter nog, de tekst van een dossier, is de volgende stap, met inbegrip van het testen van de twee nieuwe documenten, require_once ". /monetaire. Php; require_once" geld uit te breiden. /PHP moneytest. Phpunit_framework_testcase {functie; testwecancreateamoneyobject () {% geld = nieuwe monetaire (100, monetaire:: USD ());}}, dit is het experiment mislukt, maar ten minste kan worden gevonden, de munt, nu.We blijven met het minste geld, uitvoeren.Een beetje meer dan deze test streng is, nogmaals, is de auto die code, soort geld {particuliere bedragen; de particuliere Amerikaanse valuta; de functionele __construct (USD US - dollar wisselkoers) {% van dit bedrag = dollar. $> - > munt als de dollar;}}, let op, we voeren type, valuta 's, in onze tweede parameter van de fabrikant.Dit is een goede manier om te voorkomen dat onze klant, afval als geld, meer geld, het eerste wat in mijn hoofd, in de kleinste van de voorwerpen en die is zal ik moeten op de een of andere manier in vergelijking met de monetaire doelstellingen.En dan herinner ik me dat PHP is slim, als het gaat om het voorwerp van de vergelijking, dus schreef ik die test, de functie testitcantelltwomoneyobjectareequal () {% m1 = nieuwe monetaire (100 dollar USD ()); de nieuwe munt (M2 = 100, dollar USD ()); - > dat Het (voertuigen van de categorieën M1, M2,,); de dollar - > asserttrue ($m1 = = $vierkante meter);}, eigenlijk door."Dat" functie kunnen worden vergeleken met een doel, zelfs in de staat van de gelijkheid van de "= =" PHP, vertel me niet wat ik had verwacht.Goed, maar als we op een meer dan een ander groot belang is?Ik ben verbaasd is, een van de volgende tests ook zonder problemen, de functie testonemoneyisbiggerthantheother () {% m1 = nieuwe monetaire (200 dollar USD ()); de nieuwe munt (M2 = 100, dollar USD ()); - > assertgreaterthan (m1, M2, de Amerikaanse dollar); - > asserttrue ($1 > $vierkante meter);}, dat we...En testonemoneyislessthantheother () {% m1 = nieuwe monetaire (100 dollar USD ()); M2 = nieuwe monetaire (200 dollar USD ()); - > assertlessthan (m1, M2, de dollar); de dollar - > asserttrue ($m1, M2 <);},...De test, optellen, aftrekken, onmiddellijk, met het zien van zoveel PHP, in feite en vergelijking van de magie, ik kon het niet helpen om deze functie, testtwomoneyobjectscanbeadded. () {% m1 = nieuwe monetaire (100 dollar USD ()); de nieuwe munt (200 m2 =, monetaire: USD (): de som van $) nieuwe middelen; = (300 dollar USD ()); - > dat (de dollar en de dollar, M1 + m2);}, dat geld niet, voorwerpen van klasse kan worden omgezet in int, klinkt het nogal duidelijk.Op dit punt hebben we een beslissing moeten nemen.Verder kan deze oefening meer PHP magie, maar deze methode zal tot op zekere hoogte, transformatie naar een PHP controle van deze handleiding is geen patroon.Dus, laten we het doen voor de praktische tenuitvoerlegging van het besluit van het optellen en aftrekken en vermenigvuldiging van de functie van geld. En testtwomoneyobjectscanbeadded () {% m1 = nieuwe monetaire (100 dollar USD ()); de nieuwe munt (200 m2 =, monetaire:: USD ()); het bedrag van de nieuwe munt (= 300 $. Munteenheid:: USD ()); de dollar - > dat (de dollar en de dollar m1 > toevoeging van (miljoen vierkante meter));}, het experiment is mislukt, maar dat we een fout niet, "toe te voegen, recht, het geld, de openbare taken van het getamount () {naar $> het bedrag van de functie van (andere) toegevoegd;} {terug de nieuwe munt, de dollar - > het bedrag van $andere > getamount ($), - > monetaire);}, kortom, het geld, de stof, we moeten een manier te zoeken, als we door middel van de parameters.Ik schrijf een ambitieus, maar een soort variabele openbaar is ook een aanvaardbare oplossing te vinden.Maar als we willen dat de uitbreiding naar de Euro - dollar?, /* * * * * * * @ expectedexceptionmessage bedragen met expectedexception uitzondering moet de monetaire * /functie testitthrowsexceptionifwetrytoaddtwomoneyswithdifferentcurrency () {% m1 = nieuwe monetaire (100 dollar USD ()); de nieuwe munt (M2 = 100, munt: de dollar EUR ()); M1 > toevoeging van (miljoen vierkante meter);} het geld, verwerking, verschillende manieren om de verschillende valuta 's.We zullen een uitzondering, en in afwachting van de test.Of we kunnen op ons van toepassing in de verwezenlijking van een monetaire mechanismen, het geld, het voorwerp, omgezet in een standaard valuta 's, en vergelijken.Of als we een meer complexe monetaire omschakeling, we kunnen op elk moment van de een naar de ander. En na de omschakeling, in vergelijking met de munt.Dingen zijn, wanneer de omzetting in plaats van voor de omrekening van rekening moeten houden en de dingen worden heel ingewikkeld.Dus hebben we een uitzondering, openbare functies en verder gaan. Getcurrency () {terugkeer dollar - > monetaire;} functie toe te voegen ($) {% dit > ensuresamecurrencywith (andere); weer een nieuwe munt, de dollar - > het bedrag van $andere > getamount ($), de monetaire - >);} privé functie ensuresamecurrencywith (USD, enz.) {als ($- > monetaire.= $andere > getcurrency () (") een uitzondering moet met geld geld");}, dat is beter.We doen een onderzoek, om te zien of de munt is anders, op een uitzondering.Ik heb het als een onafhankelijke particuliere aanpak, omdat ik weet dat we moeten andere, in wiskunde. En vermenigvuldiging is de toevoeging van zeer vergelijkbaar zijn, zodat de code hier, kan je in de bijgevoegde code testen in functie te vinden, te verminderen (dollar, enz.) {% dit > ensuresamecurrencywith (andere ($); als andere > dollar) een uitzondering ("minus meer geld dan we"); weer een nieuwe munt, de dollar - > de hoeveelheden tot en met andere > getamount ($), - > monetaire);} functie MultiplyBy ($multiplicator, roundmethod dollar = php_round_half_up) {% product = ronde ($- > het bedrag van $50 dollar - * * * * * * *, roundmethod); weer een nieuwe munt, de dollar, Euro - > monetaire);}, met aftrekken, we moetenWe moeten er voldoende geld en vermenigvuldiging, we moeten maatregelen nemen om te zorgen voor ronde dingen naar boven of beneden om Division (de vermenigvuldiging en de cijfers van minder dan 1) niet tot de "semi - cent".We kunnen het bedrag van de monetaire factoren, de laagste.We kunnen het niet voor onze rekening, we hebben een bijna volledige, geld, en geld.Het is tijd van deze objecten, rekening.We beginnen, de munt, en de verandering van onze test, dus, de functie testitcanhaveprimaryandsecondarycurrencies () {% dit > rekening > setprimarycurrency (valuta 's: de dollar EUR ()); - > rekening > setsecondarycurrency (valuta' s: de dollar USD ()); - > dat de generator ("grote" (= > monetaire:: EUR (), "secundaire" = > dollar USD ()), de - > rekening > getcurrencies ());}, als gevolg van de dynamische aard van deze aard PHP testen, zonder enig probleem.Maar ik denk dat de verplichte methode, rekening, het gebruik, de monetaire, voorwerpen en geen andere.Dit is niet verplicht, maar ik denk dat dit type hintings zeer nuttig zijn, als mensen moeten begrijpen dat we de code, de functie van setprimarycurrency (monetaire dollar munt) {% dit > primarycurrency = dollar munt;} functie setsecondarycurrency (monetaire dollar munt) {% dit > secondarycurrency = dollar munt;}, nu is. De eerste lezing van dit deel van de code, tijd, werk en monetaire duidelijk worden. En het geld op onze rekening, twee fundamentele acties moet rekening worden gehouden met de betekenis die een deposito 's met een rekening: geld, geld van de rekening van de betekenis van de winning.Deposito 's met een bron, uit de bestemming komt niet vaak voor dat we de rekening.We weten niet hoe dat in deze transacties, kunnen wij alleen maar concentreren op de tenuitvoerlegging van deze gevolgen voor onze rekening.Dus, kunnen we stellen dat een test dergelijke deposito 's en functionele testaccountcandepositmoney () {% dit > rekening > setprimarycurrency (valuta' s: de dollar EUR ()); de nieuwe munt (= 100, geld monetaire:: EUR ()); ///////het is EUR 1 dollar - > rekening en deposito 's (GT; US - dollar); de dollar - > dat het (in dollars, de dollar - > > getprimarybalance ());}, dit zal ons dwingen om de rekening van de code schreef veel, ${privé; particuliere primarycurrency dollar; particuliere secondarycurrency dollar; particuliere secondarybalance dollar; de particuliere primarybalance dollar; de functionele getsecondarybalance () {terug de dollar - > secondarybalance;} functie terug getprimarybalance () {dollar - > primarybalance;} functie __construct ($) {% dit > id= $id;} [...] functie van de deposito 's (in dollars) {% dit > primarycurrency = = $geld > getcurrency ().De dollar - > primarybalance = geld: de dollar - > secondarybalance = $geld;}}, oké, oké.Ik weet het, ik schrijf is absoluut noodzakelijk, want de productie.Maar ik wil niet dat je sterft de baby stapjes, ben ik er vrij zeker van dat, secondarybalance code, goed zal werken.Het is bijna volledig door IDE genereren.Ik zou zelfs niet aan het testen.Als de code die ons door de test, moeten we ons de vraag stellen, als we de follow - up van de deposito 's, wat gebeurt er?We willen ons geld worden toegevoegd aan de voor de functie van de balans, testsubsequentdepositsaddupthemoney () {% dit > rekening > setprimarycurrency (valuta 's: de dollar EUR ()); de nieuwe munt (= 100, geld monetaire:: EUR ()); ///////Het is EUR 1 dollar - > rekening en deposito' s (GT; valuta 's; ///////) een rekening in euro in dollar - > rekening > deposito' s (in dollars); ///////twee rekening in euro in dollar - > dat het (in dollars > MultiplyBy (2), de dollar - > rekening > getprimarybalance ());}, oh, nee.Dus moeten we werken ons de codes van de producten en de functie van de deposito 's (in dollars) {als ($- > primarycurrency = = $geld > getcurrency ()) {% dit > primarybalance = dollar - > primarybalance?: nieuw geld (0 dollar - > primarycurrency); de dollar - > primarybalance = dollar - > primarybalance - > toevoeging van (dollar;} {%) of het > secondarybalance = dollar - > secondarybalance?: nieuw geld (0 dollar - > secondarycurrency); de dollar - > secondarybalance = dollar - > secondarybalance - > toevoeging van (dollar);}}, dat is beter.We kunnen doen, voor deposito 's, kunnen we doorgaan, uit de functie testaccountcanwithdrawmoneyofsamecurrency () {% dit > rekening > setprimarycurrency (valuta' s: de dollar EUR ()); de nieuwe munt (= 100, geld monetaire:: EUR ()); ///////het is EUR 1 dollar - > rekening > deposito 's (in dollars); de dollar - > rekening > in te trekken (de nieuwe munt (70, monetaire:: EUR ())); de dollar - > dat (de nieuwe munt (30 dollar EUR ()), het > rekening > getprimarybalance ());}, dit is een simpele test.De oplossing is eenvoudig, maar, de functie uit (in dollars) {% dit > primarycurrency = = $geld > getcurrency ().De dollar - > primarybalance = dollar - > primarybalance - > vermindering (元钱): de dollar - > secondarybalance = dollar - > secondarybalance - > vermindering (元钱);}, goed werk, maar als we willen dat een, valuta 's, dat niet Op onze rekening?We moeten voor die een excpetion, /* * * * * * * expectedexception uitzonderingen "expectedexceptionmessage @ deze rekening geen monetaire dollar * /functie testthrowsexceptionforinexistentcurrencyonwithdraw () {% dit > rekening > setprimarycurrency (valuta 's: de dollar EUR ()); de nieuwe munt (= 100, geld monetaire:: EUR ()); dit is de euro /1 /de dollar - > rekening > deposito' s (in dollars); de dollar - > rekening > in te trekken (de nieuwe munt (70, monetaire:: USD ());}, dat ertoe heeft geleid dat we controleren onze munt, de functie uit (het geld voor een dollar) {% dit > validatecurrencyfor (元钱); de dollar - > primarycurrency = = $geld > getcurrency ().De dollar - > primarybalance = dollar - > primarybalance - > vermindering (元钱): de dollar - > secondarybalance = dollar - > secondarybalance - > vermindering (元钱);} privé functie validatecurrencyfor (in dollars) {als.In_array (dollar 's > getcurrency ($), - > getcurrencies ())) een uitzondering (Sprint (deze rekening geen munt, getcurrency ($) - > > getstringrepresentation ());}, maar als we willen dat de terugvordering van meer dan wat we hebben?Als we de uitvoering van aftrekken wanneer deze situatie is opgelost, het geld.Hier is de test is daar het bewijs van. Expectedexception uitzondering ", /* * * * * * * expectedexceptionmessage @ minus geld is dan we * /functie testitthrowsexceptionifwetrytosubtractmoremoneythanwehave () {% dit > rekening > setprimarycurrency (valuta 's: de dollar EUR ()); de nieuwe munt (= 100, geld monetaire:: EUR ()); ///////- is $1 euro - > rekening > deposito' s (in dollars); de dollar - > rekening% GT% terug (de nieuwe munt (150, monetaire:: EUR ());}, winning, behandeling en uitwisseling, een moeilijker dingen omgaan als we in meerdere valuta 's is tussen hen en de uitwisseling van werken.Deze ontwerp - ons in staat is de schoonheid van het eigen klasse en het scheiden van verpakking, zodat we een vereenvoudiging van het probleem.Hoewel het logisch in een uitwisseling, kunnen heel ingewikkeld zijn, het gebruik ervan te vergemakkelijken.Met het oog op de training, stel je voor ons een zeer fundamentele, uitwisseling, logica.1 EUR = 1,5 dollar. En de uitwisseling (verandering van functie (dollar munt, de dollar prijs) {als ($prijs = = monetaire:: EUR () & & $geld > getcurrency () = = monetaire:: USD ()) is de nieuwe valuta (US - dollar MultiplyBy > (67) - > getamount ('), de prijs als de dollar (USD); de prijs van de monetaire:: = = USD () & & $geld > getcurrency () = = monetaire:: EUR ()) terug te gaan Naar de nieuwe munt, de dollar munt > MultiplyBy (1,5) - > getamount (), de Amerikaanse dollar prijs); het geld terug te geven;}}, als we de euro ons toegevoegde waarde $1,5, als we de Amerikaanse dollar en de euro zal de waarde van 1,5, anders zijn We van mening dat we de twee valuta' s van hetzelfde type, dus we doen het niet, maar het geld.Natuurlijk, in werkelijkheid is het een meer gecompliceerde, nu er een uitwisseling van voor rekening van een ander besluit, kan, wanneer we willen terugtrekken, geld, in een monetaire, maar we houden niet van de in een bepaalde munt genoeg.Dit is een test, het beter weerspiegelt.De functie testItConvertsMoneyFromTheOtherCurrencyWhenWeDoNotHaveEnoughInTheCurrentOne () {$this-> account-> setPrimaryCurrency (Currency:: USD ()); $money = nieuwe geld (100, Currency:: USD ()); //That's 1 USD $this-> account-> deposito ($money); $this-> account-> setSecondaryCurrency (Currency:: EUR ()); $money = nieuwe geld (100, Currency:: EUR ()); //That's 1 euro = 1,5 USD $this-> account-> deposito ($money); $this-> account-> terugtrekken (nieuwe geld (200, Currency:: USD ())); //That's 2 USD $this-> dat het (nieuwe geld (0, Currency:: USD ()), $this-> account-> getPrimaryBalance ()); $this-> dat het nieuw geld (34, Currency:: EUR ()), $this-> account-> getSecondaryBalance ());}, wij die ons account's. CUrrency dollar, een dollar.Dan zullen we de tweede valuta 's voor de invoering van de euro, een euro en een EUR.En dan trekken we 2 dollar.Tot slot, we zullen blijven op nul dollar en 0,34 EUR.Natuurlijk deze test gooit een uitzondering, dus we hebben een oplossing. Als deze functie terugtrekken. En bij $money) {$this-> validateCurrencyFor ($money); als ($this-> primaryCurrency = = = = = = = $money-> getCurrency ()) {als ($this-> primaryBalance > = $money) {$this-> primaryBalance = $this-> primaryBalance->; aftrekken ($money);}else{$ourMoney = $this-> primaryBalance-> voeg ($this-> secondaryToPrimary ()); $remainingMoney = $ourMoney-> aftrekken ($money); $this-> primaryBalance = nieuwe geld (0, $this-> primaryCurrency); $this-> secondaryBalance = (nieuwe uitwisseling ()) ($remainingMoney -> echter, $this-&BT; secondaryCurrency);}} {$this-> anders secondaryBalance = $this-> Seco;Ndarybalance - > vermindering (元钱);}} privé functie secondarytoprimary () {terugkeer (uitwisseling van (nieuwe)) - > omschakeling ($- > secondarybalance dollar - > primarycurrency);}, wauw, veel veranderd. Ter ondersteuning van deze automatische overdracht.Wat is er aan de hand is, als we bij de winning van onze belangrijkste monetaire situatie, hebben we niet genoeg geld, en we zullen onze tweede monetair evenwicht, en proberen te onttrekken.Als we niet genoeg geld, geld dollar om passende uitzonderingen, het object.Anders zullen wij onze belangrijkste saldo van nul voor, en we zullen de rest van het geld voor de omzetting van de tweede fase van de monetaire en zullen we de tweede balans aan de waarde van het behoud van onze rekeningen, de logica om soortgelijke automatisch omgezet in twee valuta 's.Hebben we niet de verwezenlijking van een dergelijke symmetrie van de logica.Als je dit idee, dat als een soort oefening.Bovendien, rekening houdend met een meer algemene aanpak, in beide gevallen, de automatische overdracht van magie, de complexe veranderingen in onze logica ook dwingt ons opnieuw onze een andere test.Wanneer we willen de automatische omzetting moet er sprake zijn van een evenwicht, zelfs nul. Expectedexception uitzondering ", /* * * * * * * @ expectedexceptionmessage verminderd met het geld is dan we * /functie testitthrowsexceptionifwetrytosubtractmoremoneythanwehave () {% dit > rekening > setprimarycurrency (valuta 's: de dollar EUR () = 100); de nieuwe munt (monetaire:: EUR ()); ///////het is EUR 1 dollar - > rekening > deposito' s (in dollars); de dollar - > rekening > setsecondarycurrency (valuta 's: de dollar USD ()); de nieuwe munt geld = (0, de monetaire:: USD ()); de dollar - > rekening > deposito' s (US - dollar); de dollar - > rekening% GT% terug (de nieuwe munt (150, monetaire:: EUR ());}, de verdeling van de fondsen, tussen de rekeningen, we moeten voor de uitvoering van de laatste van de toewijzing van geld is,,,,.Dit is een logische, die bepalend is voor de verdeling tussen de in de verschillende rekeningen, niet precies een cent.Als we bijvoorbeeld 0,10 cent, we moeten deze rekening in de 30% van de verhouding tussen de, dit is makkelijk.Een rekening krijgt drie cent en de andere zeven.Als we echter hetzelfde willen doen als de toewijzing van 70 dan vijf cent, we hebben een probleem.De opdracht is juist een rekening van 1,5 cent, voor rekening van een andere is 3,5 cent.Maar we kunnen niet verdeeld, dus moeten we de tenuitvoerlegging van onze eigen algoritme voor de toewijzing van het geld, kan er een oplossing voor dit probleem, een gemeenschappelijke methode is de volgorde van de verhoging met één punt van elke rekening.Als er een rekening meer dan de waarde van de precieze wiskundige cent, die moet worden afgeschaft en de verdeling van de lijst heeft ontvangen, meer geld.Hier is een grafische representation.,,,, en A - punt te bewijzen is. Onze functie testItCanAllocateMoneyBetween2Accounts () {$a1 = $this-> anAccount (); $a2 = $this-> anAccount (); $money = nieuwe geld (5, Currency:: USD ()); $money-> van ($a1, $a2, 30, 70); $this-> dat het nieuw geld (2, Currency:: USD ()), $a1-> getPrimaryBalance ()); $this-> dat het nieuw geld (3, Currency:: USD ()), $a2-> getPrimaryBalance ()); anAccount () {} particuliere functie $account = nieuwe rekening (1); $account-> setPrimaryCurrency (Currency:: USD ()); $account-> deposito (nieuwe geld (0, Currency:: USD ())); terug $account;}, we net create a, geld, het object met vijf cent en twee accounts.We noemen het "verspreiding", en dat "drie" waarden zijn in hun rekeningen.We hebben een rekening te creëren ten behoeve van de methode te snel.De test fails, zoals verwacht, maar we kunnen niet easily. maken het goed, functie van (rekening $a1, rekening $a2, $a1Percent, $a2Percent) {* * * * * * * $exactA1Balance = $this-> als $a1Percent /100; $exactA2Balance = $this-> bedrag * * * * * * * $a2Percent /100; $oneCent = nieuwe geld (1, $this-> ii); terwijl ($this-> bedrag% GT% 0) {als ($a1-> getPrimaryBalance () () -> getAmount < $exactA1Balance) {$a1-> deposito ($oneCent); $this-> amount--;} als ($this-> bedrag < = 0) uit; Als ($a2-> getPrimaryBalance -> getAmount () (); $exactA2Balance <) {$a2-> deposito ($oneCent); $this-> amount--;}}}, nou, niet het simplest code, maar het is die output aangegeven, als die van onze test bewijstHet.De enige... We kunnen nog steeds doen naar deze code is op de kleine in de genen, terwijl loop., de functie van (rekening $a1, rekening $a2, $a1Percent, $a2Percent) {* * * * * * * $exactA1Balance = $this-> als $a1Percent /100; $exactA2Balance = $this-> bedrag * * * * * * * $a2Percent /100; terwijl (wordt $this-> >; 0) {$this-> allocateTo ($a1, $exactA1Balance); als ($this-> bedrag < = 0) uit; $this-> allocateTo ($a2, $exactA2Balance);}} particuliere functie allocateTo ($account, $exactBalance) {als ($account-> getPrimaryBalance () () -> getAmount < $exactBalance) {$account-> deposito (nieuwe geld (1, $this-> ii)); $this-> amount--;}}, dat wat ik zoek, gedachten, maar met deze littlE - model op grote schaal het geval is, kunnen we op hem van toepassing.We zien, is dit een heel eenvoudige wijze van verpakking, het geld van de details van het concept.We zien dit pakket, de verlichting van de lasten van de rekening.Rekening kan worden geconcentreerd in de meer geavanceerde concepten, vanuit het oogpunt van de Bank.Voor de uitvoering van een rekening te kunnen houden, zoals de rekeninghouder, id, handel en geld.Dit is een coördinator is geen rekenmachine.Voor de berekening van het geld.Ik vond deze kleine, model is geweldig, is van grote omvang, kunnen we de zaak van toepassing zijn.In feite, elke keer als je er een waarde van de eenheid, kan je het gebruiken.Stel je voor dat je een weer van toepassing is, denk je dat een vertegenwoordiger van de temperatuur.Dit is onze munt voorwerp equivalenten.Je kunt met Fahrenheit of graden Celsius als geld, een andere situatie is als je een kaart van de toepassing van het programma, wil je de afstand tussen de plaats van vertegenwoordigers.Je kan heel gemakkelijk om gebruik te maken van dit model voor de overdracht van maatregel of rijk te meten.Als je met eenvoudige eenheid werken, kun je de uitwisseling van het doel, de verwezenlijking van eenvoudige logica, in je "geld", dus ik hoop dat je de handleiding en ben benieuwd naar de verschillende manieren, je kan met behulp van dit concept.Dank je, lezen.
De waarde van geld vormen: de vertegenwoordigers van
Previous:Een
Next Page:De datum en het tijdstip van