socialgekon.com
  • Hoved
  • Trender
  • Agilt Talent
  • Baksiden
  • Brand Design
Baksiden

Introduksjon til PHP 7: Hva er nytt og hva som er borte

En av de mest spennende hendelsene i PHP-verdenen i 2015 var utgivelsen av PHP 7. 10 år etter utgivelsen av den siste store versjonen, PHP 5. Med et stort skritt fremover introduserer PHP 7 massevis av nye funksjoner og ytelsesoppdateringer .

Imidlertid fjerner den også gammel, utdatert funksjonalitet, som introduserer noen kompatibilitetshull, noe som gjør det vanskeligere for eldre applikasjoner å migrere til den nye versjonen. Denne guiden skal tjene som en rask omvisning på hva du kan forvente hvis du planlegger å flytte eksisterende applikasjoner, eller bygge nye, på toppen av PHP 7.

Men vent, hvor gikk PHP 6?

Hvis du ikke har jobbet med PHP i det siste, kan du lure på hva som skjedde med PHP 6, hvorfor hoppet fra PHP 5 til PHP 7? Vel, lang historie kort, PHP 6 var en fiasko. Hovedfunksjonen i versjon 6 var støtte for den opprinnelige karakteren Unicode Siden PHP hovedsakelig brukes i nettutvikling og nettet trenger Unicode, var det fornuftig å ta Unicode til PHP.



Ideen var å bringe full Unicode-støtte til selve kjernen. Det ville ha utvidet evner til språk: fra evnen til å bruke emojis Dumme, som variabelnavn og funksjonsnavn, til kraftige internasjonale strengfunksjoner. For eksempel når et annet språk bruker store og små bokstaver annerledes enn engelsk, eller når et navn med kinesiske tegn må konverteres til engelsk.

PHP 6 var ambisiøs, men søppel. Slik endte vi med PHP 7, og hoppet over versjon 6 i prosessen.

PHP 6 var ambisiøs, men søppel. Slik endte vi med PHP 7, og hoppet over versjon 6 i prosessen. kvitring

Dessverre viste denne ambisiøse planen seg å være et større problem enn forventet. Det meste av kodebasen måtte overføres for å støtte Unicode for både store og store utvidelser, noe som var kjedelig og komplisert. Dette bremset utviklingen av andre funksjoner på språket, og frustrerte mange PHP-utviklere i prosessen. Ytterligere hindringer ble presentert, noe som resulterte i mindre interesse for å utvikle innfødt Unicode-støtte, noe som til slutt førte til at prosjektet ble forlatt.

Siden ressursene, for eksempel bøker og artikler, ble skrevet for PHP 6 og Unicode-støtte, vil den nye versjonen bli omdøpt til PHP 7 for å unngå forvirring.

Uansett, nok lidelse fra den triste fortiden, la oss se hva PHP 7 bringer til festen.

Performance Battle, PHP 7 vs. PHP 5

Med nesten alle oppdateringer forventes mindre ytelsesforbedringer. Denne gangen gir PHP imidlertid en betydelig forbedring i forhold til tidligere versjoner som gjør ren ytelse til en av de mest attraktive funksjonene i PHP 7. Dette kommer som en del av 'PHPNG' -prosjektet, som adresserer de interne komponentene i selve motoren. Zend.

Ved å omorganisere interne datastrukturer og legge til et mellomliggende trinn for å kode kompilering i form av et Abstract Syntax Tree (AST), blir resultatet overlegen ytelse og mer effektiv minnetildeling. Tallene ser veldig lovende ut; De Referanser utført i virkelige applikasjoner viser at PHP 7 er dobbelt så rask som PHP 5.6 i gjennomsnitt og resulterer i 50% mindre minneforbruk under forespørsler, noe som gjør PHP 7 til en sterk rival til HHVM JIT-kompilatoren av Facebook. Ta en titt på denne Zend-infografikken som viser ytelsen til noen vanlige CMS y Frameworks .

PHP 7 ser ut og føles kjent, men er innstilt for ytelse. Den raffinerte Zend Motor og de resulterende ytelsesgevinstene gjør en stor forskjell.

PHP 7 ser ut og føles kjent, men er innstilt for ytelse. Den raffinerte Zend Motor og de resulterende ytelsesgevinstene gjør en stor forskjell. kvitring

Nedgangen i minneforbruk lar også mindre maskiner bedre håndtere forespørsler sammen med muligheten til å bygge mikrotjenester rundt PHP. Interne endringer, spesielt AST-implementeringen, åpner også muligheter for fremtidige optimaliseringer som kan presse ytelsen ytterligere. En ny intern implementering av en JIT-kompilator vurderes for fremtidige versjoner.

PHP 7 syntaktisk sukker

PHP 7 kommer med nye syntaksfunksjoner. Selv om de ikke utvider mulighetene til selve språket, gir de en bedre eller enklere måte å gjøre koden din mer behagelig å skrive og mer behagelig for øynene.

Gruppeimportdeklarasjoner

Nå kan vi gruppere importdeklarasjonene for klassene som stammer fra det samme navneområdet på 'bruk' -linjen. Dette skal bidra til å justere erklæringene på en meningsfull måte eller bare lagre noen byte i filene dine.

use FrameworkModuleFoo; use FrameworkModuleBar; use FrameworkModuleBaz;

Med PHP 7 kan vi bruke:

use FrameworkModule{Foo, Bar, Baz};

Eller hvis vi foretrekker en flerlinjær stil:

use FrameworkModule{ Foo, Bar, Baz };

Null Coalescent Operator

Dette løser et vanlig problem i PHP-programmering, hvor vi vil tildele en verdi til en variabel i en annen variabel, hvis sistnevnte virkelig er satt; ellers gi den en annen verdi enn dette. Det brukes ofte når du arbeider med brukerinngang.

Pre-PHP 7:

if (isset($foo)) { $bar = $foo; } else { $bar = 'default'; // we would give $bar the value 'default' if $foo is NULL }

Etter PHP 7:

$bar = $foo ?? 'default';

Dette kan også lenkes med en rekke variabler:

$bar = $foo ?? $baz ?? 'default';

Romskipoperatør

Romskipoperatøren tillater en treveis sammenligning mellom to verdier, ikke bare som indikerer om de er like, men også hvilke som er større, over ulikheten ved å returnere 1.0 eller -1.

Her kan vi ta forskjellige handlinger avhengig av hvordan verdiene er forskjellige:

switch ($bar $foo) { case 0: echo '$bar and $foo are equal'; case -1: echo '$foo is bigger'; case 1: echo '$bar is bigger'; }

De sammenlignede verdiene kan være heltall, flyter, strenger eller til og med matriser. Sjekk ut dokumentasjonen for å få en ide om hvordan de forskjellige verdiene sammenlignes med hverandre.

Nye funksjoner i PHP 7

Men selvfølgelig gir PHP 7 også spennende ny funksjonalitet.

Skalar Parameter Typer og Returtype Tips

PHP 7 utvider deklarasjonene fra tidligere typer parametere i metoder (klasser, grensesnitt og matriser) ved å legge til de fire skalartypene; Heltall (int), Flyter ( float), Boolere (bool) og Strenger ( string) som mulige parametertyper.

Vi kan også valgfritt spesifisere hva slags metoder og funksjoner de returnerer. Støttede typer er * bool *, * int *, * float *, * string *, * array *, * callable *, * Class * or * Interface * name, * self *, and * parent * (for class methods)

Clase Calculadora { // Declaramos que los parámetros proporcionados son del tipo entero Función Pública addTwoInts (int $ x, int $ y): int { Retorno $ x + $ y; // También decimos explícitamente que este método devolverá un entero } }

Typedeklarasjoner tillater konstruksjon av mer robuste applikasjoner og unngår å sende og returnere feil verdier fra funksjoner. Andre fordeler inkluderer statiske kodeparsere og IDEer, som gir bedre oversikt over kodebasen hvis DocBlocks.

Siden PHP er et svakt typespråk, vil visse verdier for parameteren og returtypene sendes ut basert på konteksten. Hvis vi passerer verdien '3' i en funksjon som har en deklarert parameter av typen int, vil tolken godta den som et heltall og ikke kaste feil. Hvis du ikke vil ha dette, kan du aktivere modo estricto legge til et direktiv på declarar.

Declarar (tipos_estrictos = 1);

Dette er satt per fil, ettersom et globalt alternativ vil dele kodelagerene i de som er bygget med global strenghet i og de som ikke er det, noe som resulterer i uventet oppførsel når vi kombinerer kode fra begge.

Motor unntak

Med tillegg av unntak fra motoren, kan fatale feil som kan ha resultert i avslutningen av Manus de kan enkelt fanges opp og håndteres.

Feil som å kalle en ikke-eksisterende metode vil ikke avslutte skriptet, men vil i stedet kaste et unntak som kan håndteres av en fangsttestblokk, noe som forbedrer feilhåndtering for applikasjonene dine. Dette er viktig for visse typer applikasjoner, servere og Daemons , da fatale feil vil kreve omstart. Testing i PHPUnit bør også være mer nyttig, ettersom fatale feil dreper hele testpakken. Unntak, snarere enn feil, vil bli håndtert av testtilfelle.

Å legge til motorundtak for PHP 7 forhindrer avslutning av skript og forbedrer feilhåndtering.

PHP 7 ser ut og føles kjent, men er innstilt for ytelse. Den raffinerte Zend Motor og de resulterende ytelsesgevinstene gjør en stor forskjell. kvitring

PHP 7 legger til en rekke nye unntaksklasser basert på typen feil som kan oppstå. For å opprettholde kompatibilitet mellom versjoner, er et nytt grensesnitt lagt til Throwable som kan implementeres fra unntak fra motor og bruker. Dette var nødvendig for å unngå motor unntak for å utvide basen unntaksklassen, noe som resulterte i gamle kodefangst unntak som ikke eksisterte før.

Før PHP 7 ville dette ha avsluttet skriptet med en alvorlig feil:

try { thisFunctionDoesNotEvenExist(); } catch (EngineException $e) { // Clean things up and log error echo $e->getMessage(); }

Anonyme klasser

Anonyme klasser er fettere av anonyme funksjoner som du kan bruke i en kortsiktig enkel forekomst. Anonyme klasser kan enkelt opprettes og brukes akkurat som et vanlig objekt. Her er et eksempel fra dokumentene.

Pre-PHP 7

php class MyLogger { public function log($msg) { print_r($msg . ' '); } } $pusher->setLogger( new MyLogger() );

Med anonym klasse:

php $pusher->setLogger(new class { public function log($msg) { print_r($msg . ' '); } });

Anonyme klasser er nyttige i enhetstesting, spesielt i testing av objekter og tjenester. Dette hjelper oss med å unngå tunge biblioteker og rammer som replikerer, og skaper et enkelt objekt som gir grensesnittet vi vil etterligne.

CSPRNG funksjoner

Lagt til to nye funksjoner for å generere kryptografisk sikre heltall og strenger.

random_bytes(int $len);

Returnerer en tilfeldig streng med lengde $len.

php random_int(int $min, int $max);

Returnerer et tall mellom $min og $max.

Codepoint Unicode Escape Syntax

I motsetning til mange andre språk, hadde ikke PHP før PHP 7 en måte å unnslippe Unicode-kode i strenglitteratur. Denne funksjonaliteten legger til rømningssekvensen ` u 'for å produsere disse tegnene ved hjelp av UTF-8-kodekoden. Dette er bedre enn å sette inn tegnene direkte, noe som gir bedre håndtering av usynlige tegn, så vel som tegn som har samme grafiske fremstilling, men som har forskjellig betydning.

echo 'u{1F602}'; // outputs ‚

Merk at dette bryter den eksisterende koden med sekvensen ' u' fordi den endrer oppførselen.

Generatorer er oppgradert

Generatorer i PHP får også noen fine ekstra funksjoner. Generatorer har nå en returoppgave som kan brukes til å tillate at den produserer en endelig verdi etter iterasjon. Dette kan brukes til å verifisere at generatoren har kjørt uten feil, og lar koden som kalte generatoren håndtere forskjellige scenarier riktig.

Generatorer kan også returnere og gjengi uttrykk fra andre generatorer. Dette gjør at de kan bryte ned komplekse operasjoner i enklere og mer modulære enheter.

function genA() { yield 2; yield 3; yield 4; } function genB() { yield 1; yield from genA(); // 'genA' Se llama aquí e itera sobre yield 5; return 'success'; // Este es un resultado final que podemos comprobar más tarde } foreach (genB() as $val) { echo ' $val'; // Esto emitirá los valores 1 a 5 para} $genB()->getReturn(); // Esto debería devolver el 'éxito' cuando no hay errores.

Forventninger

Forventningene er en forbedring av afirmar () samtidig som du opprettholder bakoverkompatibilitet. De tillater null kostnadspåstander i produksjonskoden og gir muligheten til å kaste egendefinerte unntak når påstanden mislykkes, noe som kan være nyttig under utviklingen.

Afirmar () det blir en språkkonstruksjon i PHP 7. Påstander skal bare brukes til feilsøkingsformål i utviklings- og testmiljøer. For å konfigurere oppførselen har vi to nye direktiver.

  • zend.afirmación - 1: generer og kjør kode (utviklingsmodus) (standard) - 0: generer koden, men hopp rundt den ved kjøretid - -1: generer ikke kode som gjør at den ikke koster (produksjonsmåte)
  • afirmación.excepción - 1: kaste når påstanden mislykkes, kaste objektet som er gitt som unntak eller kaste et nytt * ErrorAffirmation * -objekt hvis unntaket ikke ble levert - 0: bruk eller generer et * Kastbart * som beskrevet ovenfor, men det genererer bare en advarsel basert på det objektet i stedet for å kaste det (kompatibel med PHP 5-oppførsel)

Forberedelse til å gå fra PHP 5 til PHP 7

Innføringen av en større utgivelse gir muligheten til å endre / oppdatere eldre funksjonaliteter eller til og med fjerne dem hvis de anses for gamle eller har vært utdaterte i noen tid. Slike endringer kan introdusere kompatibilitetsbrudd i eldre applikasjoner.

Et annet problem som oppstår fra denne versjonen er at viktige biblioteker og rammer du er avhengige av, kanskje ikke har blitt oppdatert for å støtte den nyeste versjonen. PHP-teamet har prøvd å gjøre de nye endringene så sent som mulig og å gjøre overføringen til den nye versjonen så enkel som mulig. Nyere og mer oppdaterte applikasjoner burde ha lettere for å flytte til den nye versjonen, mens eldre applikasjoner kan måtte avgjøre om fordelene oppveier kostnadene, og eventuelt velge å ikke oppgradere.

De fleste pauser er mindre og kan lett reduseres, mens andre kan kreve mer innsats og tid. I utgangspunktet, hvis du hadde foreldede advarsler i applikasjonen din før du installerte PHP 7, vil du sannsynligvis få feil som vil bryte applikasjonen til den er løst. Du ble advart, ikke sant?

Gamle SAPIer og utvidelser

Viktigst, de gamle og utdaterte SAPIene ble fjernet som utvidelsen mysql (men du burde ikke bruke dette i utgangspunktet, ikke sant?). For en komplett liste over utvidelser og fjernede høydepunkter, kan du sjekke disse RFC-ene her Y her .

Også andre SAPI-er blir portert til PHP 7.

Masse SAPIer og gamle utvidelser ble fjernet fra PHP 7. Vi spår at de ikke vil gå tapt.

Masse SAPIer og gamle utvidelser ble fjernet fra PHP 7. Vi spår at de ikke vil gå tapt. kvitring

Ensartet variabel syntaks

Denne oppdateringen gjorde noen endringer til fordel for konsistens for variabelkonstruksjoner. Dette tillater mer avanserte uttrykk med variabler, men introduserer endringer i atferd i noen andre tilfeller, som vist nedenfor.

// old meaning // new meaning $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz'] $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz'] $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']() Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()

Dette vil bryte oppførselen til applikasjoner som har tilgang til verdier som dette. På den annen side kan du gjøre noen pene ting som dette :.

// Nested () foo()(); // Calls the return of foo() $foo->bar()(); // IIFE syntax like JavaScript (function() { // Function body })(); // Nested :: $foo::$bar::$baz

Gamle stilmerker fjernet

Åpnings- / lukkekodene `` , , ... `fjernes og er ikke lenger gyldige. Det bør være enkelt å bytte dem ut med gyldige, men hva gjør du med dem uansett rart?

Ugyldige navn for klasser, grensesnitt og egenskaper

Som et resultat av tilleggene, for eksempel parameter- og returtypeklasser, kan ikke grensesnitt og egenskaper lenger ha følgende navn:

- bool - int - float - string - null - true - false

Disse forårsaker brudd på eksisterende applikasjoner og bibliotekene som bruker dem, men de skal være enkle å fikse. Selv om de ikke forårsaker noen feil og er gyldige, bør ikke følgende brukes da de er reservert for fremtidig bruk:

-ressurs

objekt - blandet - numerisk

Å avstå fra å bruke dem bør spare deg for problemer med å endre dem i fremtiden. For en fullstendig liste over endringer som vil bryte kompatibiliteten, sjekk ut dette dokument .

Du kan også bruke php7cc , som sjekker koden din og kan oppdage potensielle problemer som kan oppstå hvis du går til PHP 7. Men det er selvfølgelig ingen bedre måte enn å installere PHP 7 og sjekke det ut selv. ## Potensielle problemer med PHP-kompatibilitet ### PHP 7 Kompatibilitet med infrastruktur

Mange hostingtjenester har begynt å legge til støtte for PHP 7. Dette er gode nyheter for delte hostingleverandører, ettersom ytelsesgevinsten vil tillate dem å øke antall klientnettsteder på maskinvaren, redusere driftskostnadene og øke marginene. Når det gjelder kundene selv, bør de ikke forvente for mye løft under disse forholdene, men for å være rettferdig, delt hosting er uansett ikke et ytelsesorientert alternativ.

På den annen side vil tjenester som tilbys av virtuelle private servere eller dedikerte servere, dra full nytte av dette ytelseshit. Noen tjenester av PaaS som Heroku støttet PHP 7 fra begynnelsen, men andre tjenester, som AWS Beanstalk Y OpenShift de Oracle , de henger etter. Sjekk PaaS-leverandørens nettsted for å se om PHP 7 allerede støttes, eller om support kommer i nær fremtid. Selvfølgelig lar IaaS-leverandører deg ta kontroll over maskinvaren og installere PHP 7 (eller kompilere hvis det er mer du liker). PHP 7-pakker er nå tilgjengelig for store IaaS-miljøer.

PHP 7 programvarekompatibilitet

I tillegg til infrastrukturkompatibilitet, bør du også være oppmerksom på potensielle problemer med programvarekompatibilitet. Populære innholdsstyringssystemer som WordPress, Joomla og Drupal har lagt til støtte for PHP 7 med sine nyeste versjoner. Viktige rammer som Symfony og Laravel har også full støtte. Det er imidlertid på tide med et forsiktighetsord. Denne støtten utvides ikke til tredjepartskode i form av plugins, plugins, pakker, eller hva som helst ru CMS eller rammeverk kaller dem. De kan lide av kompatibilitetsproblemer, og det er ditt ansvar å sørge for at alt er klart for PHP 7.

For aktive og vedlikeholdte arkiver bør dette ikke være et problem. Imidlertid kan gamle, vedlikeholdsfrie arkiver som mangler PHP 7-støtte, gjøre hele applikasjonen ubrukelig.

Fremtiden til PHP

PHP 7-versjonen fjernet gammel og utdatert kode og banet vei for nye funksjoner og ytelsesoppdateringer i fremtiden. PHP forventes også å få ytterligere ytelsesoptimaliseringer snart. Til tross for noen bakoverkompatibilitetshull, er de fleste problemer enkle å løse. Biblioteker og rammeverk overfører nå koden til PHP 7 og gjør de nyeste versjonene tilgjengelige. Jeg vil oppmuntre deg til å prøve å se resultatene selv. Kanskje søknaden din allerede støttes og venter på å bruke og dra nytte av PHP 7.

I slekt: Listen over de 10 vanligste feilene PHP-utviklere gjør>

Hold deg kult: Hvordan ta designfeedback strategisk

Ux Design

Hold deg kult: Hvordan ta designfeedback strategisk
En veiledning i designflyt for utviklere: Lever bedre UI / UX i tide

En veiledning i designflyt for utviklere: Lever bedre UI / UX i tide

Livsstil

Populære Innlegg
Veiledning i videospillfysikk - Del I: En introduksjon til stiv kroppsdynamikk
Veiledning i videospillfysikk - Del I: En introduksjon til stiv kroppsdynamikk
Navigere i nyansene ved due diligence for investeringer
Navigere i nyansene ved due diligence for investeringer
Slik tar du nydelig landskapsfotografering med en iPhone
Slik tar du nydelig landskapsfotografering med en iPhone
Introduksjon til Deep Learning Trading in Hedge Funds
Introduksjon til Deep Learning Trading in Hedge Funds
Figma vs. Sketch vs. Axure - En oppgavebasert gjennomgang
Figma vs. Sketch vs. Axure - En oppgavebasert gjennomgang
 
Tre helsevesensteknologiinnovasjoner: Få bedre resultater og lavere kostnader
Tre helsevesensteknologiinnovasjoner: Få bedre resultater og lavere kostnader
Omfavne Sass: Hvorfor du bør slutte å bruke Vanilla CSS
Omfavne Sass: Hvorfor du bør slutte å bruke Vanilla CSS
Hvordan lagre Instagram-bilder på en iPhone
Hvordan lagre Instagram-bilder på en iPhone
Cybersecurity: Hva enhver administrerende direktør og økonomidirektør bør vite
Cybersecurity: Hva enhver administrerende direktør og økonomidirektør bør vite
Hvordan øke hastigheten på iPhone
Hvordan øke hastigheten på iPhone
Kategorier
Fremtidens ArbeidKpi Og AnalyticsDesign ProsessProduktets LivssyklusMobil DesignProsjektledelseAgilt TalentWeb Front-EndInnleggLagring

© 2023 | Alle Rettigheter Reservert

socialgekon.com