PHP 8.1 programmandi lingua emissio

Post annum evolutionis emissio linguae programmandi PHP 8.1 oblata est. Novus ramus seriem novarum notarum includit, ac variae mutationes quae convenientiam frangunt.

Key emendationes in PHP 8.1:

  • Adiecta subsidia ad enumerationem, exempli gratia, nunc haec constructio uti potes: enum Status {casu pendente; case Active; theca Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) { } public function setStatus(Status $status): vacui { // ... } } $post->setStatus(Status::Active);
  • Adiecta subsidia stamina leves fibrae dictae, quae te permittunt ut stamina in gradu parvo administrare. Fibra subsidii ad tabulas Amphp et ReactPHP addenda cogitavit. $fiber = novus Fibra (munus (): vacui { $valueAfterResuming = Fibre::suspende('post suspensum); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('post resumpto');
  • Exsecutio obiecti codicis cache (opcache) emendatus est, ut possibilis sit notitias de hΓ¦reditate classium cache. Optimization effecit ut ad aliquas applicationes perficiendas per 5-8% augeretur. Aliae optimizationes includunt optimization of JIT operationis, exsequendae JIT subsidii architecturae ARM64 (AArch64), acceleratio nominis solutionis, optimiation of timelibi et ext/date bibliothecae, auctus serialization et deserialization perficiendi, optimiization of get_declared_classes(), explodere() , str() function, strnatcmp(), dechex(). In genere, 23.0% augetur effectus pro Symfony Demo, et 3.5% pro WordPress.
  • Operator vestimenta intus vestit "...$var", quae substitutionem vestium existendi cum definiens novum apparatum, extensum est ad claves chordae sustentandas (antea tantum digitales identificatores sustentabantur). Exempli gratia, nunc in codice uti potes: $array1 = ["a" => 1; $array2 = ["b" => 2]; $ordinata = ["a" => 0, ...$ordinata, ...$ordinata]; var_dump($ordinate); // ["a" => 1, "b" => 2]
  • "Novum" keyword in initializiis uti licet, ut in definitionibus functionis sicut defaltam parametri vel argumenti attributis. class MyController { munus publicum __construct(privatum Logger $logger = new NullLogger(), ) {} }
  • Possibile est notare proprietates classium ad solum accessum legere (informatio in talibus proprietatibus semel tantum scribi potest, post quam mutationi praesto non erit). classis PostData { publici functionis __construct(publice readonly string $title,publica readonly DateTimeImmutable $date, ) { } } $post = new Post('Title', /* ... */); $post->title = 'Alia'; > Error: Non potest mutare readonly possessionem Post :: $ titulum
  • Nova syntaxis ad res callabiles adducta est - clausura nunc formari potest vocando functionem et transeuntem valorem "..." ut argumentum (i.e. myFunc(...) loco clausurae:: fromCallable('myFunc ')): munus foo (int $a, int $b) { /* ... */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Plenum auxilium ad rationes sectionis addidit, permittens te novas rationes iungendo entibus creare. Dissimiles coniunctionis generum, quae collectiones duorum vel plurium generum definiunt, intersectio specierum praesentiam non ullius generum recensentium requirunt, sed omnes species determinatas in statuto implendi. munus generateSlug (HasTitle & HasId $post) {reditus strtolower($ post->getTitle()). $post->getId(); }
  • Novum genus "numquam" est, quod analysres staticos certiorem facere potest quod munus progressio exsecutionis terminabit, exempli gratia, exceptionem mittentes vel munus exitus exsequens. function dd (mixtum $input): nunquam {exitum; }
  • Novum munus ordinata_is_list proponitur, quo permittit determinare claves in ordine ordinatae ad augendas valores numerales, ab 0: $ list = ["a", "b", "c"; array_is_list($list); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // falsum $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // false
  • Hactenus "ultima" keyword utere potes ne constantes ordinis parens opprimantur. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Fatalis error: Bar ::X finalem constantem non nolens oboedire Foo ::X}
  • Munera fsync et fdatasync proponuntur cogendis mutationibus servandis a orbis cache. $file = fopen("sample.txt", "w"); fwrite($file, "Quidam content"); si (fsync($file)) { resonare "File feliciter perseveravit in disco"; } fclose($file);
  • Addidit facultatem uti praepositionibus "0o" et "0O" pro numeris octalibus, praeter antecedentem praepositionem "0". 016 === 0o16; // verum 016 === 0O16; // true
  • Proponitur selective circumscribere usum $ GLOBALS, quod ad violationem retro compatibilitatis ducet, sed fieri poterit ut signanter operationes cum vestimentis acceleraret. Exempli gratia, facultatem inactivare scribendo ad $ GLOBALS ac transiens $ GLOBALS a regula consideratur. Analysis 2000 fasciculorum ostendit solum XXIII ex illis hac mutatione affici. Exempli gratia, si propositio approbata sit, 23 locutiones non amplius sustinebit ut: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =&$ GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Internae methodi nunc rectam rationem reddere debent. In PHP 8.1, typum reddens, quae declarationi functioni non congruit, admonitionem proferet, sed in PHP 9.0 admonitio errori restituetur.
  • Opus continuatum est in muneribus transferendis ab facultatibus ad res abusiones adhibitis. functiones finfo_* et imap_ ad obiecta translata sunt.
  • Deprecata est nulla bona obiter pro argumentis ad munera interna non-nullabilia notata. In PHP 8.1, adhibitis constructis ut str_ continet ("filum", nullum) inducet ad admonitionem et in PHP 9 errorem.
  • Auxilia addiderunt pro MurmurHash3 et xxHash algorithms hashing.

Source: opennet.ru