Programmeerimiskeele PHP 8.2 väljaanne.

После года разработки представлен релиз языка программирования PHP 8.2. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость.

Ключевые улучшения в PHP 8.2:

  • Добавлена возможность пометки класса доступным только для чтения. Свойства в подобных классах могут быть заданы только один раз, после чего не будут доступны для изменения. Ранее только для чтения могли помечаться отдельные свойства класса, а теперь разом можно включить данный режим для всех свойств класса. Указание флага «readonly» на уровне класса также блокирует динамическое добавление свойств в класс. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Error: Cannot create dynamic property Post::$unknown
  • Lisatud on eraldi tüübid „true“, „false“ ja „null“, mis võivad võtta ainult ühe lubatud väärtuse ja mida saab kasutada näiteks funktsiooni lõpetamise vea või tühi väärtuse tagastamiseks. Varasemalt võisid „true“, „false“ ja „null“ olla kasutusel ainult koos teiste tüüpidega (nt „string|false“), kuid nüüd võivad need olla rakendatud eraldi: function alwaysFalse(): false { return false; }
  • Antud on võimalus filtreerida konfidentsiaalset teavet virnastuse andmetes, mis väljastatakse vea korral. Teatud teabe väljalõikamine võib olla vajalik, kui teave esinevate vigade kohta saadetakse automaatselt kolmandate osapoolte teenustele, mis jälgivad probleeme ja teavitavad sellest arendajaid. Näiteks saab virnastusest välja jätta parameetreid, mis sisaldavad kasutajanimesid, paroole ja keskkonnamuutujaid. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} thrown in test.php on line 8
  • Konstantide määramine on tüübid (trait, koodide korduvkasutamise mehhanism) lubatud. Juhtimine tüübis määratud konstantidele on võimalik klassi kaudu, mis kasutab seda tüüpi (aga mitte tüübi nime kaudu). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Добавлена возможность задания типов в дизъюнктивной нормальной форме (DNF, Disjunctive Normal Form), позволяющей совместить объединение типов (коллекции из двух и более типов) и пересечение типов (типы, значения которых подпадают одновременно под несколько типов). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Uus laiendus «Random» on ettepanek, mis sisaldab funktsioone ja klasse psevdosuviade arvude ja järjestuste genereerimiseks. Moodul pakub objektorienteeritud liidese, võimaldab valida erinevaid mootoreid psevdosuviade arvude genereerimiseks, sealhulgas krüptograafias rakendamiseks sobivaid, ja annab abifunktsioone, näiteks massiivide ja stringide juhuslikuks segamiseks, juhuslike massiivi võtmete valimiseks, samasuguste generaatorite samaaegseks kasutamiseks, millel on oma sõltumatu olek. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString(‘foobar’);
  • On iseseisev tähistust muudeti. Funktsioonid, nagu strtolower() ja strtoupper(), muudetakse nüüd alati tähistuse vahemikus ASCII, kui määratakse tähistuseks "C".
  • Lisatud uusi funktsioone: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Lisatud uusi meetodeid: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Dünaamiliste omaduste loomise võimalus klassis on deklareeritud vananenuks. PHP 9.0-s toob klassis algselt määratlemata omadustele juurdepääs kaasa vea (ErrorException). Klassid, mis pakuvad meetodeid __get ja __set omaduste loomiseks, või dünaamilised omadused stdClass-is jätkavad töötamist muutumatult; toimetatakse toetamine vaid mitteilmselt töötamiseks mitteeksisteerivate omadustega, et kaitsta arendajat varjatud vigade eest. Vanakoodi toimimise säilitamiseks on ette nähtud atribuut "#[AllowDynamicProperties]", mis võimaldab dünaamiliste omaduste kasutamist.
  • Объявлена устаревшей возможность подстановки значений переменных в строки при помощи выражений «${var}» и ${(var)}». Поддержка обычно используемых подстановок «{$var}» и «$var» сохранена. Например: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Deprecated: Using ${} in strings is deprecated
  • Объявлены устаревшими частично поддерживаемые вызываемые объекты (callable), которые могут быть вызваны через «call_user_func($callable)», но не поддерживают вызов в форме «$callable()»: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster