, 9 nyttige php funktioner og karakteristika, du har brug for at vide,,,,, 21,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,,, to gange om måneden, kan vi se på nogle af vores læsere favorit stillinger fra hele historien om nettuts +, selv efter anvendelse af folkesundhedsprogrammet i årevis, vi faldt over funktioner og karakteristika, som vi ikke kender til.nogle af disse kan være meget nyttige, men ikke udnyttes fuldt ud.med det i tankerne, jeg har en liste med ni utrolig nyttigt php funktioner og karakteristika, at de bør være bekendt med.,,,, 1.funktioner med vilkårlige række argumenter, kan de ved allerede, at folkesundhedsprogrammet giver dig mulighed for at definere funktioner med frivillig argumenter.men der er også en metode til at helt vilkårligt antal funktion argumenter. det første er et eksempel med fakultative argumenter: //funktion med 2 frivilligt argumenter funktion foo ($arg1 = "$arg2 =") (echo "arg1: $arg1 \\ n", echo "arg2: $arg2) n"} foo ('hello,'world) /* fingeraftryk: arg1: hej arg2: verden * /foo(); /* fingeraftryk: arg1: arg2: * /, lad os se, hvordan vi kan bygge en funktion, der accepterer en række argumenter.denne gang skal vi udnytte func_get_args(): //- argumentet liste kan være tomt funktion foo() (//returnerer en række bestod alle argumenter $args = func_get_args(); for hvert ($args som $k = > $v) (echo "arg." ($k + 1). ": $v \\ n") foo(); /* fingeraftryk intet * /foo ('hello) /* fingeraftryk arg1: hej * /foo ('hello "," verden "," igen ") /* fingeraftryk arg1: hej arg2: verden arg3: igen * /,,. 2.ved hjælp af glob() finde filerne, mange php funktioner er lang og beskrivende navne.det kan imidlertid være svært at sige, hvad en funktion, der hedder glob() gør, medmindre de allerede er bekendt med udtrykket andetsteds fra, tænk på det som en større udgave af scandir() funktion.It can let you search for files by using patterns., //get all php files $files = glob('*.php'); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ) */,You can fetch multiple file types like this:, //get all php files AND txt files $files = glob('*.{php,txt}', GLOB_BRACE); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php [4] => log.txt [5] => test.txt ) */,Note that the files can actually be returned with a path, depending on your query:, $files = glob('../images/a*.jpg'); print_r($files); /* outputudseende: system ([0] = >... /images /apple.jpg [1] = >... /images /art.jpg) * /,, hvis du ønsker at få den fulde vej til hvert enkelt dossier, kan du bare ringe til realpath() funktion på tilbage værdier: $filer = klat ("... /images /*. jpg); //gælder den funktion, at hvert system element $filer = array_map ('realpath, $- filer); print_r ($filer) /* produktionen ser ud: system ([0] = > c) wamp. www. apple.jpg [billeder. 1] = > c) wamp. www. billeder. art.jpg) * /,,. 3.hukommelse af oplysninger, ved at minde anvendelse af manuskripter, du kan forbedre din kode bedre. under folkesundhedsprogrammet er en skraldemand og en ret kompleks hukommelse manager.mængden af hukommelse, der anvendes af dit manuskript.gå op og ned under gennemførelsen af et manuskript.for at få de nuværende hukommelse anvendelse, kan vi bruge den memory_get_usage() funktion, og at få det højeste beløb, hukommelse, der anvendes på ethvert punkt, vi kan bruge memory_get_peak_usage() funktion., echo "første". memory_get_usage(). "bytes) n" /* fingeraftryk oprindelige: 361400 bytes * /////////- lad os bruge et minde for ($jeg = 0 $jeg < 100000 $i + +) ($system [] = md 5 ($);) //- lad os fjerne halvdelen af det system for ($jeg = 0 $jeg < 100000 $i + +) (frakoblet ($system [$i]);} echo "endelig". memory_get_usage(). "bytes) n" /* fingeraftryk endelig: 885912 bytes * /echo "top". memory_get_peak_usage(). "bytes) n" /* fingeraftryk højdepunkt: 13687072 bytes * /,, 4.cpu anvendelse, for det, vi skal bruge den getrusage() funktion.husk på, at dette ikke er til rådighed på vinduer - platforme, print_r (getrusage()) /* - system ([ru_oublock] = > 0 [ru_inblock] = > 0 [ru_msgsnd] = > 2 [ru_msgrcv] = > 3 [ru_maxrss] = > 12692 [ru_ixrss] = > 764 [ru_idrss] = > standard 3864 [ru_minflt] = > 94 [ru_majflt] = > 0 [ru_nsignals] = > 1 - [ru_nvcsw] = > 67 [ru_nivcsw] = > 4 - [ru_nswap] = > 0 [ru_utime. tv_usec] = > 0 [ru_utime. tv_sec] = > 0 [ru_stime. tv_usec] = > 6269 [ru_stime. tv_sec] = > 0) * /, det ser måske lidt kryptisk, medmindre du har allerede et system administration baggrund.her er den redegørelse for hver værdi (, du behøver ikke at lære disse):,, ru_oublock:, block output - operationer, ru_inblock:, block input - operationer, ru_msgsnd: meddelelser, der sendes,, ru_msgrcv:, modtagne meddelelser, ru_maxrss:, maksimal bopæl der størrelse, ru_ixrss:, integreret fælles hukommelse størrelse, ru_idrss:, integreret unshared data størrelse, ru_minflt:, side generobrer,, ru_majflt: s fejl, ru_nsignals:, signaler, ru_nvcsw: frivillige forbindelse afbrydere,, ru_nivcsw:, ufrivillig forbindelse afbrydere,, ru_nswap:, swaps, ru_utime. tv_usec:, bruger tid (ms), ru_utime. tv_sec:, bruger tid (sekunder), ru_stime. tv_usec: system tid (ms), ru_stime. tv_sec: system tid (sekunder), for at se, hvor meget cpu magtenmanuskript har indtaget, er vi nødt til at se på "bruger tid" og "system" værdier.de sekunder og mikrosekunder dele er angivet separat ved misligholdelse.du kan dele mikrosekunder værdi af 1 million, og det er sekunder værdi, for at få den samlede sekunder som et decimaltal. lad os se et eksempel: //sove i 3 sekunder (ikke optaget) søvn (3); $data = getrusage(), echo "bruger tid:".($data ['ru_utime. tv_sec '] + $data ['ru_utime. tv_usec'] /1000000), echo "system:".($data ['ru_stime. tv_sec '] + $data ['ru_stime. tv_usec'] /1000000) /* fingeraftryk bruger tid: 0.011552 system: 0 * /er, selv om det tog tre sekunder til at flygte, cpu anvendelse var meget lav.fordi i søvn, manuskriptet faktisk ikke forbruger cpu ressourcer.der er mange andre opgaver, der kan tage tid, men kan ikke anvende cpu, som venter på diskette operationer.så som de kan se, cpu 'en anvendelse og den faktiske længde af runtime er ikke altid de samme. her er et andet eksempel: //loop 10 millioner gange (tid) til ($jeg = 0 $jeg < 10000000. $i + +) {} $data = getrusage(); echo "bruger tid:".($data ['ru_utime. tv_sec '] + $data ['ru_utime. tv_usec'] /1000000), echo "system:".($data ['ru_stime. tv_sec '] + $data ['ru_stime. tv_usec'] /1000000) /* fingeraftryk bruger tid: 1.424592 system: 0.004204 * /, det tog ca. 1,4 sekunder af cpu, som næsten alle blev bruger tid, da der ikke var nogen system kræver tid, system. den tid, de bruger, der udfører cpu systemet kræver, at kernen i programmet vegne.her er et eksempel på, at: $start = microtime (korrekt); //kalder microtime for om 3 sekunder, mens (microtime (korrekt) - start < 3) {} $data = getrusage(), echo "bruger tid:".($data ['ru_utime. tv_sec '] + $data ['ru_utime. tv_usec'] /1000000), echo "system:".($data ['ru_stime. tv_sec '] + $data ['ru_stime. tv_usec'] /1000000) /* fingeraftryk bruger tid: 1.088171 system: 1.675315 * /, nu har vi en hel del system tid anvendelse.det er, fordi der kræves det microtime() funktion, mange gange, og som udfører en anmodning ved hjælp af styresystemet for at hente den. også du kan mærke tallene ikke helt tilføje op til 3 sekunder.det er, fordi der var sikkert andre processer på serveren, samt at det manuskript ikke var med 100% cpu for hele varigheden af de 3 sekunder. - 5.magi konstanter, folkesundhedsprogrammet giver nyttige magi konstanter for at hente den nuværende linje (, __line__,), fil vej (, __file__,), årbog vej (, __dir__,), funktion navn (, __function__,), klasse navn (, __class__,), metode navn (__method__) og namespace (, __namespace__,)., vi ikke kommer til at dække alle de i denne artikel, men jeg vil vise dig nogle anvendelser.,, når, herunder andre manuskripter, det er en god idé at bruge den, __file__, konstant (eller, __dir__, som af folkesundhedsprogrammet 5.3): //det er i forhold til ladt manuskript er sti //det kan forårsage problemer, når det kører manuskripter fra forskellige vejvisere require_once ('config /database. folkesundhedsprogrammet); //det altid i forhold til denne sag er sti //, uanset hvor det er omfattet af enquire_once (dirname (__file__)./ud /database. folkesundhedsprogrammet "), idet der, __line__ gør debugging - lettere.kan du spore telefonen numre: //en kode //...my_debug ("nogle ser besked", __line__) /* fingeraftryk linje 4: nogle ser besked * ///flere kode //...my_debug ("en anden ser besked", __line__) /* fingeraftryk linje 11: en anden ser besked * /funktion my_debug ($mng, $linje) (echo "$linje: $mng) n"), 6.at skabe unikke id, der kan være situationer, hvor du er nødt til at skabe en enestående kæde.jeg har set mange mennesker bruger den, md5(), funktion for dette, selv om det er ikke beregnet til dette formål: //skaber enestående kæde echo md 5 (time().mt_rand (11000000)), der er faktisk et php funktion ved navn uniqid(), der skal anvendes til dette. //skaber enestående kæde echo uniqid(); /* fingeraftryk 4bd67c947233e * ///skabe en enestående kæde echo uniqid(); /* fingeraftryk 4bd67c9472340 * /, som de kan se, at selv om! enestående, er de samme for første flere tegn.det er, fordi de genererede snor er relateret til serveren.det er faktisk en god bivirkning, som enhver ny genereret id kommer senere i alfabetisk orden, så de kan løses. for at mindske chancerne for at få en kopi, du kan få et præfiks eller andet parameter til at øge entropi: //med præfiks echo uniqid ('foo_) /* fingeraftryk foo_4bd67d6cd8b8f * /////////med mere entropi echo uniqid ("ægte) /* fingeraftryk 4bd67d6cd8b926.12135106 * ///både echo uniqid ('bar_, sande) /* fingeraftryk bar_4bd67da367b650.43684647 * /, denne funktion vil medføre mindre strenge end md5(),, som også vil redde dig noget plads. 7..serialization, har du brug for at lagre en kompleks variabel i en database eller en tekst, fil?du behøver ikke at komme med en smart løsning til at omstille deres systemer eller genstande i formaterede tråde, som allerede er under folkesundhedsprogrammet opgaver til dette formål. der er to populære metoder til serializing variabler.Here is an example that uses the serialize() and unserialize():, //a complex array $myvar = array( \t'hello', \t42, \tarray(1,'two'), \t'apple' ); //convert to a string $string = serialize($myvar); echo $string; /* prints a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";} */ //you can reproduce the original variable $newvar = unserialize($string); print_r($newvar); /* prints Array ( [0] => hello [1] => 42 [2] => Array ( [0] => 1 [1] => two ) [3] => apple ) */,This was the native PHP serialization method. men da json er blevet så populær i de senere år, besluttede de at tilføje, støtte til det i folkesundhedsprogrammet 5.2.nu kan du bruge den, json_encode(), og json_decode(), fungerer så godt: //et komplekst system $myvar = system ('hello, 42, stk. 1,'two array "),'apple); //konverteres til en snor $kæde = json_encode ($myvar); echo $snor. /* fingeraftryk [" hej "42 [1]" to "," æble "] * /////////kan du kopiere den oprindelige variable $newvar = json_decode ($snor); print_r ($newvar) /* - system ([0] = > hej [1] = > 42 [2] = > system ([0] = > 1 [1] = > 2) [3] = > æble) * /er, at det er mere kompakt, og bedst af alt, der er forenelige med javascript og mange andre sprog.men for komplekse objekter, nogle oplysninger kan være tabt. 8.komprimering strenge, når vi taler om motorer, vi plejer at tænke på sager, som f.eks. zip arkiver.det er muligt at indføre lange tråde i folkesundhedsprogrammet, uden at det indebærer et arkiv filer. i det følgende eksempel vil vi udnytte den gzcompress() og gzuncompress() funktioner: $kæde = "lorem ipsum dolor sidde amet, consectetur adipiscing elit.nu er elit id mi ultricies adipiscing.nulla facilisi.praesent pulvinar, sapien vel feugiat vestibulum, nulla advokat pretium orci, ikke - ultricies elit lacus quis ante.lorem ipsum dolor sidde amet, consectetur adipiscing elit.aliquam pretium ullamcorper urna quis iaculis.etiam ac massa sed turpis midlertidigt luctus.curabitur sed nibh eu elit mollis congue.praesent ipsum produktionen, consectetur vitae ornare en, aliquam et nunc.i id magna pellentesque tellus posuere adipiscing.sed mi metus ikke på lacinia augue.sed magna nisi, ornare i mollis i, mollis sed nunc.etiam på justo i leo congue mollis.nullam i neque eget metus hendrerit scelerisque eu - enim.men malesuada lacus eu nulla bibendum id euismod urna sodales. "og $komprimeret = gzcompress ($snor), echo "oprindelige størrelse:".strlen ($snor). "), n" /* fingeraftryk oprindelige størrelse: 800 * /echo "komprimeret størrelse:".strlen ($)). "), n" /* billeder komprimeret størrelse: 418 * ///bliver det $oprindelige = gzuncompress ($)), var vi i stand til at achive næsten 50% størrelse reduceres.også de funktioner, gzencode() og gzdecode() achive lignende resultater, ved at anvende en anden kompressionsalgoritme. 9.register - funktion, der er en funktion til register_shutdown_function(), som vil lade dig henrette en kode, lige før det sidste løb, forestil dig, at du vil fange en benchmark - statistikker i slutningen af dit manuskript, gennemførelse, f.eks. hvor lang tid det tog at køre: //fange begyndelsen $start_time = microtime (sand). //////////gøre nogle ting...//udstilling, hvor længe det har echo "henrettelse var:".(microtime (korrekt) - $start_time)."sekunder.", først kan synes trivielt.du har lige tilføje koden til bunden af manuskriptet, og det løber, før den er færdig.men hvis du nogensinde til den exit() funktion, at adfærdskodeksen vil aldrig løbe.også, hvis der er en fatal fejl, eller hvis manuskriptet er afsluttet af brugeren (ved presning stop knappen i browseren), det må ikke løbe, når du bruger register_shutdown_function(), din kode vil henrette uanset hvorfor manuskriptet er holdt op med at løbe: $start_time = microtime (korrekt). register_shutdown_function ('my_shutdown) ////////////////gøre nogle ting...funktion my_shutdown() (global $start_time, echo "henrettelse var:".(microtime (korrekt) - $start_time)."sekunder."), konklusioner, kender du andre på elementer, som ikke er velkendt, men kan være ganske nyttigt?jeg deler med os i disse bemærkninger.og tak for det!,