(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); PHP 8.2: Hvað er nýtt? - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2022-08-31
Hugbúnaðarþróun

PHP 8.2: Hvað er nýtt?

The Codest

Sebastian Luczak

PHP einingarleiðtogi

Nýja útgáfan af PHP er handan við hornið. Hvaða nýju innleiðingarnar ættir þú að þekkja? Skoðaðu þessa grein til að komast að því!

Hér er tómt.

PHP 8.2 Er að fara að koma út. Kannski verður þetta útgáfan sem gerir uppfærslu í PHP 8 aðlaðandi fyrir alla. Tölum um hvað forritarar geta hlakkað til með PHP 8.2 og undirbúa fyrir nýjustu útgáfuna. En fyrst skulum við fljótt fara yfir allar PHP-útgáfurnar og breytingarnar í gegnum árin.

Yfirlit yfir fyrri útgáfur

PHP 7,4

Skráðar eignir

Hvað gerirðu með þessu?
class User {
    public int $id;
    public string $name;
}
Spurningarmerki

Örföll

Hvað gerirðu með þessu?
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
Spurningarmerki

Takmörkuð sambreytileiki í endurkomutýpu og andstæðbreytileiki í aðferðatýpu

Hvað gerirðu með þessu?
class A {}
class B extends A {}

class Producer {
    public function method(): A {}
}
class ChildProducer extends Producer {
    public function method(): B {}
}
?>

Null-samruna úthlutunar-reiknirit

Hvað gerirðu með þessu?
$array['key'] ??= computeDefault();
// er gróflega jafngilt þessu
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
?>

Að opna fylki innanhúss

Hvað gerirðu með þessu?
$parts = ['epli', 'perur'];
$fruits = ['banani', 'appelsína', ...$parts, 'vatnsmelóna'];
// ['banani', 'appelsína', 'epli', 'perur', 'vatnsmelóna'];
?>

Sérsniðin hlutaserialísun

Hvað gerirðu með þessu?
// Skilar fylki sem inniheldur alla nauðsynlega stöðu hlutins.
public function __serialize(): array;

// Endurheimtir stöðu hlutins úr gefinni gögn rað.
opinber aðferð __unserialize(rað $data): ekkert;
?>

PHP 8.0

Gefinn út í nóvember 2020, færði PHP 8.0 okkur besta eiginleikarnir hingað til, sem innihalda:

Nefnd rök

htmlspecialchars($string, double_encode: false); Hljóðskrift

Eiginleikar

class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

Uppstigning eiginleika smiðsins

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Verkalýðsforysta

class Number {
  public function __construct(
    private int|float $number
  ) {}
}

new Number('NaN'); // TypeError

Samræma tjáningu

echo match (8.0) {
  '8.0' => "Ó nei!",
  8.0 => "Þetta er það sem ég bjóst við",
};
//> Þetta er það sem ég bjóst við

Nullsafe-rekstraraðili

$land = $fundur?->notandi?->fáHeimilisfang()?->land;

PHP 8.1

Tölusetningar

enum Status
{
    case Draft;
    case Published;
    case Archived;
}
function acceptStatus(Status $status) {...}

Eiginleikar sem eingöngu er hægt að lesa

class BlogData
{
    public readonly Status $status;

 public function __construct(Status $status)
    {
 $this->status = $status;
    }
}

Fyrsta flokks kallanleg setningafræði

$foo = $this->foo(...);

$fn = strlen(...);

Nýtt í upphafsskráum

class Service
{
    private Logger $logger;

 public function __construct(
 Logger $logger = new NullLogger(),
    ) {
 $this->logger = $logger;
    }
}

Hreinar skurðpunktagerðir

function count_and_iterate(Iterator&Countable $value) {
    foreach ($value as $val) {
 echo $val;
    }

 count($value);
}

Trefjar

$response = $httpClient->request('https://example.com/');
print json_decode($response->getBody()->buffer())['code'];

PHP 8.2

PHP 8.2 Kynnir frekari breytingar sem miða að því að auðvelda forritaranum lífið og hámarka vinnu hans enn frekar. Hér að neðan er listi yfir nýja eiginleika.

Bara-lestrar flokkar

Ein af stærstu umbótunum í nýrri útgáfu af PHP er að hægt sé að búa til beint a Aðeins lesanlegt class. Flokkur sem er lýst með þessari eiginleika mun sjálfkrafa miðla honum til breyta sinna. DTO-flokkar munu nú líta snyrtilegir og hreinir út!

readonly class InvoiceDTO
{
    public function __construct(
 public UUID $uuid,
 public Issuer $issuer,
 public DateTime $issuedAt,
    ) {}
}

Úrelda dýnamískar eiginleika

Önnur stórbreytingin er úrelding dýnamískra breyta í flokkum. Eftirfarandi innleiðing mun kasta úreldingaviðvörun í PHP 8.2 og Villuundantekning í framtíðarútgáfu af PHP.

class MyUser
{
    public string $name;
}
(...)
$myUser->name = 'Name'; // OK
$myUser->surname = 'Surname'; // úrelt / villuundantekning

Það er þess virði að nefna að flokkar sem innleiða __fá og __setja aðferðir og flokkar sem erfa beint frá staðlaður flokkur getur enn innleitt töfraaðferðir án hindrana.

Hér vísa ég einnig til einn Áhugaverð umræða á GitHub, þar sem forritarar PHP-CS ræða þessa breytingu og þörfina á að breyta vinsæla tóli sínu fyrir nýju útgáfuna af forritunarmálinu.

Að lokum, en ekki síður mikilvægt, geturðu slökkt á þessu atferli með athugasemd.

#[AllowDynamicProperties]
class MyUser
{
    public string $name;
}

$myUser->surname = 'Surname'; // OK

Nýjar sjálfstæðar gerðir: Ekkert gildi, sannur, og rangt

Þangað til núna hafa fall sem alltaf skiluðu a sannur eða rangt gildi þurfti að vera lýst með a Búll tegund.

function alwaysTrue(): bool { return true; }

Frá og með nú getum við notað sannur og rangt sem einföld gerðir í gildum sem falla frá fallum.

function alwaysTrue(): true { return true; }

Gerðir afskurðarskilyrða í venjulegu formi

(DNF) er staðlað sniðmát til að skipuleggja boolska tjáningar. Nánar tiltekið felur það í sér að byggja boolska tjáningu upp sem röð af AND-skilyrðum sem eru tengd með OR. Þegar það er notað við gerðartilkynningar gerir það kleift að skrifa sameinaðar Union- og Intersection-gerðir á staðlaðan hátt sem greinarinn getur meðhöndlað.

Þetta er stór breyting, því við getum nú haft null-gildisgengil skurðpunkta, til dæmis:

function getFullName((HasName&HasSurname)|null $user) { ... }

Stöðugar breytur í einkennum

Ég er ekki mikill talsmaður þess að nota Traits og slík breyting er mér eingöngu útlitsleg, sérstaklega þar sem hún leyfir þér ekki að nota gildi Traits án þess að frumstilla hlutinn.

trait Foo {
    public const FLAG_1 = 1;
    protected const FLAG_2 = 2;
    private const FLAG_3 = 2;

 public function doFoo(int $flags): void {
 if ($flags & self::FLAG_1) {
            echo 'Fékk fánann 1';
 }
 if ($flags & self::FLAG_2) {
 echo 'Fékk fánann 2';
 }
 if ($flags & self::FLAG_3) {
 echo 'Fékk fánann 3';
 }
    }
}

Breyting á breytum í bakrekningum

Ein af mikilvægustu breytingunum sem ég hlakka til. Í nýjustu útgáfunni af PHP munum við geta merkt breytur sem NæmurBreytugildi. Hvers vegna ættum við?

Stack-traces í undantekningum hjá PHP eru mjög gagnleg við villuleit, en þau gera þér kleift að skoða gildi breyta fyrirfram. Til dæmis skulum við ímynda okkur PDO. kóði var notað til að tengjast gagnagrunni. Villusporið myndi líta svona út:

PDOException: SQLSTATE[HY000] [2002] Engin slík skrá eða skráarvisti í /var/www/html/test.php:3
Stafsröð:
#0 /var/www/html/test.php(3): PDO->__construct('mýs-kú:host=loca...', 'root', 'password')
#1 {main}

Eftir að hafa notað athugasemd #[NæmurParámétur] Stakksporið okkar mun ekki lengur sýna gildi breytunnar.

function test(
    $foo,
    #[SensitiveParameter] $bar,
    $baz)
 {
    throw new Exception('Error');
}

test('foo', 'bar', 'baz');

/*
Banvæn villa: Ekki tekin upp Exception: Error í test.php:8
Staplaga:
0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz')
1 {main}
  kastað í test.php á línu 8
*/

Fá eiginleika enum-gilda í konst-tjáningum

Sem höfundur segir
, Aðalhvatinn að þessari breytingu er að gera kleift að sækja nafn- og gildiseiginleika á stöðum þar sem ekki er heimilt að nota enum-hluti, eins og í lyklum fylkja. Við gætum unnið að því að bæta fylki svo þau gætu verið stækkuð til að leyfa enum eða alla hluti sem lykla, en það er einfaldara að leyfa að sækja eiginleika enum-hluta.

enum A: string {
    case B = 'B';
    const C = [self::B->value => self::B];
}

Dagsetningarfallagerðir skila gerðum

Áður en núverandi útgáfa var tekin upp virkuðu fastar aðferðir svona:

DateTime::createFromImmutable(): DateTime
DateTimeImmutable::createFromMutable(): DateTimeImmutable 

Í PHP 8.2 Það verður breytt í:

DateTime::createFromImmutable(): static
DateTimeImmutable::createFromMutable(): static

Þetta er brottröskun fyrir bókasafnsgerendur og/eða allar sérsniðnar útfærslur á DateTime.

Úrelda og fjarlægja `utf8_encode` og `utf8_decode`

Þetta voru tvær fall sem þjónuðu ekki tilgangi sínum, þar sem þær umbreyttu aðeins á milli Íslenskur staðall ISO-8859-1 og UTF-8. Handbók PHP mælir með að nota mb_umbreyta_kóðun í staðinn.

Staðbundna óháð tilfellabreyting

Svæðisnæmi er best lýst af höfundi RFC-skjalsins:

Áður en PHP 8.0 kom út var staðfærsla PHP stillt úr umhverfinu. Þegar notandi setur upp Linux spyr það hvaða tungumál hann vill að það sé. Notandinn kann að meta ekki algerlega afleiðingar þessa valkosta. Það stillir ekki aðeins notendaviðmótsmálið fyrir innbyggðum skipunum, heldur breytir það einnig víðtækt hvernig stafræðisvinnsla í C-bókasafninu virkar. Til dæmis myndi notandi sem velur “tyrknesku” við uppsetningu Linux finna að forrit sem kalla toupper(‘i’) myndu fá punktstóruðu stóru I-ið (U+0130, “İ”).

Í tímum staðlaðra textamiðaðra samskiptaprótókolla er náttúrulegt mál minnihlutaforrit til stórbokksbreytingar. En jafnvel þótt notandinn vildi nota náttúrulegt mál til stórstafaumbrots, myndi hann ólíklega ná árangri með strtolower(). Þetta er vegna þess að hún vinnur strenginn einn bita í einu og sendir hvern bita til tolower() í C-bókasafninu. Ef inntakið er UTF-8, sem er langvinsælasta nútímavalkosturinn, mun strtolower() skemma strenginn og yfirleitt framleiða ógilda UTF-8 sem útkomu.

PHP 8.0 hætti að virða umhverfibreytur locale. Þannig er locale alltaf “C” nema notandinn kalli sérstaklega á setlocale(). Þetta þýðir að meirihluti ósamrýmanlegra breytinga er þegar að baki. Öll forrit sem treysta á kerfis-locale til stórstafa-/smástafa umbreytingar á gömlum 8-bita stafasettum hefðu brotnað með PHP 8.0.

Þetta þýðir að allar aðgerðir hér að neðan munu framkvæma ASCII-stafahæðarbreytingu frá PHP.8.2:
breyta stafi í lágstafi, strtoupper, stristr, strípós, strripos, lcfirst, ucfirst, háskólaorð, str_ireplace

Úrelda ${} strengjafyllingu

Við höfum margar leiðir til að innlimma breytur í strengi í PHP:
– Beint innlimun breyta (“$foo”)
– Setta utan um breytuna (“{$foo}”)
– Braces eftir dollartákninum (“${foo}”)
– Breytilegar breytur (“${expr}”, sem jafngildir (string) ${expr})

Til að forðast rugling og misnotkun munu þær ekki virka lengur:

"Halló ${heimurinn}";
Úrelt: Notkun ${} í strengjum er úrelt

"Halló ${(heimurinn)}";
Úrelt: Notkun ${} (breytilegra breyta) í strengjum er úrelt

Yfirlit

Þetta eru ekki allar breytingarnar sem PHP 8.2 mun bjóða okkur. Því miður fengum við enn ekki stuðning við almenn gerðir, samkvæmt því sem Nikita sagði að monómorfuðu almennu gerðirnar myndu bæta of mikið við afköst og að endurmynduð almenn gerðir krefðust margra breytinga í allri kóðagrunninum. Það sem þó ber að athuga er aga og sýn hjá vara. Breytingarnar sem hafa verið innleiddar í hverri nýrri útgáfu tungumálsins verða sífellt skýrari, og áhugasamir munu taka eftir því að PHP er að færast í rétta átt bæði hvað varðar einfaldaða setningagerð og stuðning við nýjungar. Ég geri ráð fyrir að þegar á næsta ári munum við sjá kallanlegur sem gildur tegund.

samstarfsfáninn

Tengdar greinar

Hugbúnaðarþróun

PHP þróun. Symfony Console-íhlutur – ráð og brellur

Þessi grein var búin til með það að markmiði að sýna þér gagnlegustu og áhrifaríkustu ráðin og brellurnar varðandi Symfony Console-þróun.

The Codest
Sebastian Luczak PHP einingarleiðtogi
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Rétti hátturinn til að finna bestu Java-þróunaraðila

Að finna hinn fullkomna Java-þróunaraðila getur verið krefjandi verkefni. Þar sem eftirspurn markaðarins eftir slíkum sérfræðingum vex með ótrúlegum hraða, geta tiltækar heimildir til að leita að hæfileikum stundum virst...

The Codest
Grzegorz Rozmus Java einingaleiðtogi

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian is_ISIcelandic