diff --git a/images/php8/logo_php8_4.svg b/images/php8/logo_php8_4.svg new file mode 100644 index 0000000000..9ca76c1c05 --- /dev/null +++ b/images/php8/logo_php8_4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/images/php8/php_8_4_released.png b/images/php8/php_8_4_released.png new file mode 100644 index 0000000000..3dc88ee1b4 Binary files /dev/null and b/images/php8/php_8_4_released.png differ diff --git a/releases/8.4/common.php b/releases/8.4/common.php new file mode 100644 index 0000000000..3a439f2815 --- /dev/null +++ b/releases/8.4/common.php @@ -0,0 +1,74 @@ + 'English', + 'ru' => 'Russian', + 'pt_BR' => 'Português do Brasil', + 'nl' => 'Nederlands', + 'es' => 'Spanish', +]; + +function common_header(string $description): void { + global $MYSITE; + + $meta_image_path = \htmlspecialchars( + \filter_var($MYSITE . 'images/php8/php_8_4_released.png', \FILTER_VALIDATE_URL)); + $meta_description = \htmlspecialchars($description); + + \site_header("PHP 8.4.0 Release Announcement", [ + 'current' => 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' +
+
+ + +
+
+'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.4/en.php b/releases/8.4/en.php new file mode 100644 index 0000000000..7ff380e63b --- /dev/null +++ b/releases/8.4/en.php @@ -0,0 +1,5 @@ +chooseCode("", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + +mirror_redirect("/releases/8.4/$lang.php"); diff --git a/releases/8.4/languages/en.php b/releases/8.4/languages/en.php new file mode 100644 index 0000000000..0db7d60915 --- /dev/null +++ b/releases/8.4/languages/en.php @@ -0,0 +1,55 @@ + 'PHP 8.4 is a major update of the PHP language. It contains many new features, such as property hooks, asymmetric visibility, an updated DOM API, performance improvements, bug fixes, and general cleanup.', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.4 is a major update of the PHP language.
It contains many new features, such as property hooks, asymmetric visibility, an updated DOM API, performance improvements, bug fixes, and general cleanup.', + 'upgrade_now' => 'Upgrade to PHP 8.4 now!', + + 'property_hooks_title' => 'Property hooks', + 'property_hooks_description' => 'Property hooks provide support for computed properties that can natively be understood by IDEs and static analysis tools, without needing to write docblock comments that might go out of sync. Furthermore, they allow reliable pre- or post-processing of values, without needing to check whether a matching getter or setter exists in the class.', + 'asymmetric_visibility_title' => 'Asymmetric Visibility', + 'asymmetric_visibility_description' => 'The scope to write to a property may now be controlled independently from the scope to read the property, reducing the need for boilerplate getter methods to expose a property’s value without allowing modification from the outside of a class.', + 'deprecated_attribute_title' => '#[\Deprecated] Attribute', + 'deprecated_attribute_description' => 'The new #[\Deprecated] attribute makes PHP’s existing deprecation mechanism available to user-defined functions, methods, and class constants.', + 'dom_additions_html5_title' => 'New ext-dom features and HTML5 support', + 'dom_additions_html5_description' => '

New DOM API that includes standards-compliant support for parsing HTML5 documents, fixes several long-standing compliance bugs in the behavior of the DOM functionality, and adds several functions to make working with documents more convenient.

The new DOM API is available within the Dom namespace. Documents using the new DOM API can be created using the Dom\HTMLDocument and Dom\XMLDocument classes.

', + 'new_array_find_title' => 'New array_*() functions', + 'new_array_find_description' => 'New functions array_find(), array_find_key(), array_any(), and array_all() are available.', + 'pdo_driver_specific_parsers_title' => 'PDO Driver specific SQL parsers', + 'pdo_driver_specific_parsers_description' => 'New subclasses Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, and Pdo\Sqlite of PDO are available.', + 'new_without_parentheses_title' => 'new MyClass()->method() without parentheses', + 'new_without_parentheses_description' => 'Properties and methods of a newly instantiated object can now be accessed without wrapping the new expression in parenthesis.', + + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'new_jit_implementation' => 'New JIT implementation based on IR Framework', + 'new_core_functions' => 'New request_parse_body() function.', + 'new_bcmath_functions' => 'New bcceil(), bcdivmod(), bcfloor(), and bcround() functions.', + 'new_round_modes' => 'New RoundingMode enum for round() with 4 new rounding modes TowardsZero, AwayFromZero, NegativeInfinity, and PositiveInfinity.', + 'new_date_functions' => 'New DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), and DateTimeImmutable::setMicrosecond() methods.', + 'new_mb_functions' => 'New mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), and mb_lcfirst() functions.', + 'new_pcntl_functions' => 'New pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), and pcntl_waitid() functions.', + 'new_reflection_functions' => 'New ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), and ReflectionProperty::isDynamic() methods.', + 'new_standard_functions' => 'New http_get_last_response_headers(), http_clear_last_response_headers(), and fpow() functions.', + 'new_xml_functions' => 'New XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), and XMLWriter::toMemory() methods.', + 'new_grapheme_function' => 'New grapheme_str_split() function.', + + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_pecl' => 'The IMAP, OCI8, PDO_OCI, and pspell extensions have been unbundled and moved to PECL.', + 'bc_nullable_parameter_types' => 'Implicitly nullable parameter types are now deprecated.', + 'bc_classname' => 'Using _ as a class name is now deprecated.', + 'bc_zero_raised_to_negative_number' => 'Raising zero to the power of a negative number is now deprecated.', + 'bc_gmp' => 'GMP class is now final.', + 'bc_round' => 'Passing invalid mode to round() throws ValueError.', + 'bc_typed_constants' => 'Class constants from extensions date, intl, pdo, reflection, spl, sqlite, xmlreader are typed now.', + 'bc_mysqli_constants' => 'MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, and MYSQLI_TYPE_INTERVAL constants have been removed.', + 'bc_mysqli_functions' => 'mysqli_ping(), mysqli_kill(), mysqli_refresh() functions, mysqli::ping(), mysqli::kill(), mysqli::refresh() methods, and MYSQLI_REFRESH_* constants have been deprecated.', + 'bc_standard' => 'stream_bucket_make_writeable() and stream_bucket_new() now return an instance of StreamBucket instead of stdClass.', + 'bc_core' => 'exit() behavioral change.', + 'bc_warnings' => 'E_STRICT constant has been deprecated.', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

For source downloads of PHP 8.4 please visit the downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

+

The migration guide is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.

', +]; diff --git a/releases/8.4/languages/es.php b/releases/8.4/languages/es.php new file mode 100644 index 0000000000..2f881a8260 --- /dev/null +++ b/releases/8.4/languages/es.php @@ -0,0 +1,55 @@ + 'PHP 8.4 es una actualización importante del lenguaje PHP. Contiene muchas características nuevas, como hooks para propiedades, visibilidad asimétrica, una API DOM actualizada, mejoras de rendimiento, correcciones de errores y limpieza general.', + 'documentation' => 'Documentación', + 'main_title' => '¡Lanzado!', + 'main_subtitle' => 'PHP 8.4 es una actualización importante del lenguaje PHP.
Contiene muchas características nuevas, como hooks para propiedades, visibilidad asimétrica, una API DOM actualizada, mejoras de rendimiento, correcciones de errores y limpieza general.', + 'upgrade_now' => '¡Actualiza a PHP 8.4 ahora!', + + 'property_hooks_title' => 'Hooks para Propiedades', + 'property_hooks_description' => 'Los hooks para propiedades proporcionan soporte para propiedades calculadas que pueden ser comprendidas nativamente por los IDE y las herramientas de análisis estático, sin necesidad de escribir comentarios docblock que podrían desincronizarse. Además, permiten un preprocesamiento o postprocesamiento fiable de los valores, sin necesidad de comprobar si existe un getter o setter coincidente en la clase.', + 'asymmetric_visibility_title' => 'Visibilidad asimétrica', + 'asymmetric_visibility_description' => 'El alcance para escribir en una propiedad ahora se puede controlar independientemente del alcance para leer la propiedad, lo que reduce la necesidad de métodos getter repetitivos para exponer el valor de una propiedad sin permitir modificaciones desde fuera de una clase.', + 'deprecated_attribute_title' => 'Atributo #[\Deprecated]', + 'deprecated_attribute_description' => 'El nuevo atributo #[\Deprecated] hace que el mecanismo de obsolescencia existente de PHP esté disponible para funciones, métodos y constantes de clase definidas por el usuario.', + 'dom_additions_html5_title' => 'Nuevas características de ext-dom y soporte para HTML5', + 'dom_additions_html5_description' => '

Nueva API DOM que incluye soporte conforme a los estándares para el análisis de documentos HTML5, corrige varios errores de cumplimiento antiguos en el comportamiento de la funcionalidad DOM, y añade varias funciones para hacer más conveniente trabajar con documentos.

La nueva API DOM está disponible dentro del espacio de nombres Dom. Los documentos que utilizan la nueva API DOM pueden ser creados utilizando las clases Dom\HTMLDocument y Dom\XMLDocument.', + 'new_array_find_title' => 'Nuevas funciones array_*()', + 'new_array_find_description' => 'Nuevas funciones disponibles: array_find(), array_find_key(), array_any() y array_all().', + 'pdo_driver_specific_parsers_title' => 'Procesadores SQL específicos para PDO Driver', + 'pdo_driver_specific_parsers_description' => 'Nuevas subclases de PDO: Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Sqlite están disponibles.', + 'new_without_parentheses_title' => 'new MyClass()->method() sin paréntesis', + 'new_without_parentheses_description' => 'Las propiedades y métodos de un objeto recién instanciado ahora se pueden acceder sin envolver la expresión new entre paréntesis.', + + 'new_classes_title' => 'Nuevas Clases, Interfaces y Funciones', + 'new_jit_implementation' => 'Nueva implementación JIT basada en el marco IR.', + 'new_core_functions' => 'Nueva función request_parse_body().', + 'new_bcmath_functions' => 'Nuevas funciones: bcceil(), bcdivmod(), bcfloor() y bcround().', + 'new_round_modes' => 'Nuevo enum RoundingMode para round() con 4 nuevos modos de redondeo: TowardsZero, AwayFromZero, NegativeInfinity y PositiveInfinity.', + 'new_date_functions' => 'Nuevos métodos: DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), y DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Nuevas funciones: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), y mb_lcfirst().', + 'new_pcntl_functions' => 'Nuevas funciones: pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() y pcntl_waitid().', + 'new_reflection_functions' => 'Nuevos métodos: ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), y ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Nuevas funciones: http_get_last_response_headers(), http_clear_last_response_headers() y fpow().', + 'new_xml_functions' => 'Nuevos métodos: XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() y XMLWriter::toMemory().', + 'new_grapheme_function' => 'Nueva función grapheme_str_split().', + + 'bc_title' => 'Deprecaciones y cambios en compatibilidad retroactiva', + 'bc_pecl' => 'Las extensiones IMAP, OCI8, PDO_OCI y pspell han sido desagregadas y movidas a PECL.', + 'bc_nullable_parameter_types' => 'Los tipos de parámetros implícitamente nulos ahora están en desuso.', + 'bc_classname' => 'Usar _ como nombre de clase ahora está en desuso.', + 'bc_zero_raised_to_negative_number' => 'Elevar cero a la potencia de un número negativo ahora está en desuso.', + 'bc_gmp' => 'La clase GMP ahora es final.', + 'bc_round' => 'Pasar un modo inválido a round() lanza un ValueError.', + 'bc_typed_constants' => 'Las constantes de clase de las extensiones date, intl, pdo, reflection, spl, sqlite, xmlreader ahora tienen tipos.', + 'bc_mysqli_constants' => 'Los constantes MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, y MYSQLI_TYPE_INTERVAL han sido eliminadas.', + 'bc_mysqli_functions' => 'Las funciones mysqli_ping(), mysqli_kill(), mysqli_refresh(), los métodos mysqli::ping(), mysqli::kill(), mysqli::refresh(), y los constantes MYSQLI_REFRESH_* están en desuso.', + 'bc_standard' => 'stream_bucket_make_writeable() y stream_bucket_new() ahora devuelven una instancia de StreamBucket en lugar de stdClass.', + 'bc_core' => 'Cambio en el comportamiento de exit().', + 'bc_warnings' => 'El constante E_STRICT está en desuso.', + + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mejor seguridad de tipos.', + 'footer_description' => '

Para descargar el código fuente de PHP 8.4, por favor visita la página de descargas. Los binarios para Windows se encuentran en el sitio PHP para Windows. La lista de cambios está registrada en el ChangeLog.

+

La guía de migración está disponible en el Manual de PHP. Por favor, consúltala para una lista detallada de nuevas características y cambios incompatibles con versiones anteriores.

', +]; diff --git a/releases/8.4/languages/nl.php b/releases/8.4/languages/nl.php new file mode 100644 index 0000000000..cb2cf3505d --- /dev/null +++ b/releases/8.4/languages/nl.php @@ -0,0 +1,53 @@ + 'PHP 8.4 is een omvangrijke update van de PHP programmeertaal. Het bevat veel nieuwe functionaliteit, zoals property hooks, asymmetrische zichtbaarheid, een bijgewerkte DOM API, prestatieverbeteringen, bugfixes en meer consistentie.', + 'documentation' => 'Documentatie', + 'main_title' => 'Beschikbaar!', + 'main_subtitle' => 'PHP 8.4 is een omvangrijke update van de PHP programmeertaal.
Het bevat veel nieuwe functionaliteit, zoals property hooks, asymmetrische zichtbaarheid, een bijgewerkte DOM API, prestatieverbeteringen, bugfixes en meer consistentie.', + 'upgrade_now' => 'Upgrade nu naar PHP 8.4!', + + 'property_hooks_title' => 'Property hooks', + 'property_hooks_description' => 'Property hooks geven ondersteuning voor berekende eigenschappen. Deze worden rechtstreeks ondersteund door IDEs en statische analyseprogramma’s, zonder dat documentatie blokken nodig zijn. Bovendien laten ze toe om waarden voor- of achteraf te verwerken zonder gebruik te maken van een getter of setter in de klasse.', + 'asymmetric_visibility_title' => 'Asymmetrische zichtbaarheid', + 'asymmetric_visibility_description' => 'De scope voor het schrijven naar een eigenschap kan nu onafhankelijk gecontroleerd worden ten opzichte van de scope om de eigenschap te lezen. Dit reduceert de nood voor repetitieve getter en setter methoden om de eigenschap bloot te stellen zonder aanpassing toe te laten buiten de klasse.', + 'deprecated_attribute_title' => '#[\Deprecated] attribuut', + 'deprecated_attribute_description' => 'Het nieuwe #[\Deprecated] attribuut maakt PHP’s bestaand uitfaseringsmechanisme beschikbaar voor gebruiker gedefinieerde functies, methoden en klasseconstanten.', + 'dom_additions_html5_title' => 'Nieuwe ext-dom functies en HTML5 ondersteuning', + 'dom_additions_html5_description' => '

Nieuwe DOM API toe met correcte ondersteuning voor de HTML 5 standaard, oplossingen voor verschillende lang bestaande compliance bugs in the DOM functionaliteit, en verschillende nieuwe functies om het werken met documenten eenvoudiger te maken.

De nieuwe DOM API is beschikbaar via de Dom namespace. Documenten die de nieuwe API willen gebruiken, kunnen aangemaakt worden via de Dom\HTMLDocument en Dom\XMLDocument klassen.

', + 'new_array_find_title' => 'Nieuwe array_*() functies', + 'new_array_find_description' => 'Nieuwe functies array_find(), array_find_key(), array_any(), en array_all() zijn nu beschikbaar.', + 'pdo_driver_specific_parsers_title' => 'PDO driver specifieke SQL parsers', + 'pdo_driver_specific_parsers_description' => 'Nieuwe subklassen Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Sqlite van PDO zijn nu beschikbaar.', + 'new_without_parentheses_title' => 'new MyClass()->method() zonder haakjes', + 'new_without_parentheses_description' => 'Eigenschappen en methoden van een nieuw geïnstantieerd object kunnen nu opgevraagd worden zonder de new expressie tussen haakjes te zetten.', + + 'new_classes_title' => 'Nieuwe klassen, interfaces en functies', + 'new_core_functions' => 'Nieuwe request_parse_body() functie.', + 'new_bcmath_functions' => 'Nieuwe bcceil(), bcdivmod(), bcfloor(), en bcround() functies.', + 'new_round_modes' => 'Nieuwe RoundingMode enum voor round() met 4 nieuwe afrondingsmodi TowardsZero, AwayFromZero, NegativeInfinity, en PositiveInfinity.', + 'new_date_functions' => 'Nieuwe DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond(), en DateTimeImmutable::setMicrosecond() methoden.', + 'new_mb_functions' => 'Nieuwe mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), en mb_lcfirst() functies.', + 'new_pcntl_functions' => 'Nieuwe pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), en pcntl_waitid() functies.', + 'new_reflection_functions' => 'Nieuwe ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed(), en ReflectionProperty::isDynamic() methoden.', + 'new_standard_functions' => 'Nieuwe http_get_last_response_headers(), http_clear_last_response_headers(), en fpow() functies.', + 'new_xml_functions' => 'Nieuwe XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri(), en XMLWriter::toMemory() methoden.', + + 'bc_title' => 'Uitfaseringen en neerwaarts incompatibele aanpassingen', + 'bc_pecl' => 'De IMAP, OCI8, PDO_OCI en pspell-extensies zijn ontbundeld en verplaatst naar PECL.', + 'bc_nullable_parameter_types' => 'Impliciet parameters als null definiëren is nu uitgefaseerd.', + 'bc_classname' => 'Gebruik van _ als een klassenaam is nu uitgefaseerd.', + 'bc_zero_raised_to_negative_number' => 'Nul verheffen tot een negatieve macht is nu uitgefaseerd.', + 'bc_gmp' => 'GMP klasse is nu final.', + 'bc_round' => 'Ongeldige modus doorgeven aan round() resulteert in een ValueError.', + 'bc_typed_constants' => 'Klasseconstanten van extensies date, intl, pdo, reflection, spl, sqlite, xmlreader hebben nu types.', + 'bc_mysqli_constants' => 'MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE, en MYSQLI_TYPE_INTERVAL constanten zijn verwijderd.', + 'bc_mysqli_functions' => 'mysqli_ping(), mysqli_kill(), mysqli_refresh() functies, mysqli::ping(), mysqli::kill(), mysqli::refresh() methoden, en MYSQLI_REFRESH_* constanten zijn uitgefaseerd.', + 'bc_standard' => 'stream_bucket_make_writeable() en stream_bucket_new() geven nu een instantie van StreamBucket terug in plaats van stdClass.', + 'bc_core' => 'exit() heeft ander gedrag.', + 'bc_warnings' => 'E_STRICT constante is uitgefaseerd.', + + 'footer_title' => 'Betere prestaties, betere syntaxis, verbeterd type systeem.', + 'footer_description' => '

Ga naar de downloads pagina om de PHP 8.4 code te verkrijgen. Uitvoerbare bestanden voor Windows kan je vinden op de PHP voor Windows website. De volledige lijst met wijzigingen is vastgelegd in een ChangeLog.

+

De migratie gids is beschikbaar in de PHP Handleiding. Gebruik deze om een gedetailleerde lijst te krijgen van nieuwe opties en neerwaarts incompatibele aanpassingen.

', +]; diff --git a/releases/8.4/languages/pt_BR.php b/releases/8.4/languages/pt_BR.php new file mode 100644 index 0000000000..1c808a19bf --- /dev/null +++ b/releases/8.4/languages/pt_BR.php @@ -0,0 +1,55 @@ + 'PHP 8.4 é uma atualização importante da linguagem PHP. Ela contém muitos novos recursos, como hooks de propriedade, visibilidade assimétrica, uma API DOM atualizada, melhorias de desempenho, correções de bugs e uma limpeza geral.', + 'documentation' => 'Doc', + 'main_title' => 'Lançado!', + 'main_subtitle' => 'PHP 8.4 é uma atualização importante da linguagem PHP.
Ela contém muitos novos recursos, como hooks de propriedade, visibilidade assimétrica, uma API DOM atualizada, melhorias de desempenho, correções de bugs e uma limpeza geral.', + 'upgrade_now' => 'Atualize para PHP 8.4 agora!', + + 'property_hooks_title' => 'Hooks de Propriedade', + 'property_hooks_description' => 'Hooks de Propriedade oferecem suporte para propriedades computadas que podem ser interpretadas nativamente por IDEs e ferramentas de análise estática, sem a necessidade de escrever comentários em docblocks que podem ficar desatualizados. Além disso, eles permitem o pré-processamento ou pós-processamento confiável de valores, sem precisar verificar se um getter ou setter correspondente existe na classe.', + 'asymmetric_visibility_title' => 'Visibilidade Assimétrica', + 'asymmetric_visibility_description' => 'O escopo para escrita em uma propriedade agora pode ser controlado independentemente do escopo para leitura da propriedade, reduzindo a necessidade de métodos getter redundantes para expor o valor de uma propriedade sem permitir sua modificação fora da classe.', + 'deprecated_attribute_title' => '#[\Deprecated] Atributo', + 'deprecated_attribute_description' => 'O novo atributo #[\Deprecated] torna o mecanismo de descontinuação existente no PHP disponível para funções, métodos e constantes de classe definidas pelo usuário.', + 'dom_additions_html5_title' => 'Novos recursos ext-dom e suporte a HTML5', + 'dom_additions_html5_description' => 'Novas classes Dom\HTMLDocument, Dom\XMLDocument e métodos DOMNode::compareDocumentPosition(), DOMXPath::registerPhpFunctionNS(), DOMXPath::quote(), XSLTProcessor::registerPHPFunctionNS() estão disponíveis.', + 'new_array_find_title' => 'Novas funções array_*()', + 'new_array_find_description' => 'Novas funções array_find(), array_find_key(), array_any() e array_all() estão disponíveis.', + 'pdo_driver_specific_parsers_title' => 'Parsers SQL específicos para drivers PDO', + 'pdo_driver_specific_parsers_description' => 'Novas subclasses Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Sqlite de PDO estão disponíveis.', + 'new_without_parentheses_title' => 'new MyClass()->method() sem parênteses', + 'new_without_parentheses_description' => 'Propriedades e métodos de um objeto recém-instanciado agora podem ser acessados sem a necessidade de envolver a expressão new entre parênteses.', + + 'new_classes_title' => 'Novas classes, interfaces e funções', + 'new_jit_implementation' => 'Nova implementação JIT baseada no Framework IR', + 'new_core_functions' => 'Nova função request_parse_body().', + 'new_bcmath_functions' => 'Novas funções bcceil(), bcdivmod(), bcfloor() e bcround().', + 'new_round_modes' => 'Novo Enum RoundingMode para round() com 4 novos modos de arredondamento: TowardsZero, AwayFromZero, NegativeInfinity e PositiveInfinity.', + 'new_date_functions' => 'Novos métodos DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() e DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Novas funções mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() e mb_lcfirst().', + 'new_pcntl_functions' => 'Novas funções pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() e pcntl_waitid().', + 'new_reflection_functions' => 'Novos métodos ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() e ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Novas funções http_get_last_response_headers(), http_clear_last_response_headers() e fpow().', + 'new_xml_functions' => 'Novos métodos XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() e XMLWriter::toMemory().', + 'new_grapheme_function' => 'Nova função grapheme_str_split().', + + 'bc_title' => 'Alterações obsoletas e incompatibilidades com versões anteriores', + 'bc_pecl' => 'As extensões IMAP, OCI8, PDO_OCI e pspell foram separadas e movidas para o PECL.', + 'bc_nullable_parameter_types' => 'Tipos de parâmetros implicitamente anuláveis agora estão obsoletos.', + 'bc_classname' => 'O uso de _ no nome da classe agora está obsoleto.', + 'bc_zero_raised_to_negative_number' => 'Elevar zero a um número negativo agora está obsoleto.', + 'bc_gmp' => 'A classe GMP agora é final.', + 'bc_round' => 'Passar um modo inválido para round() agora lança um ValueError.', + 'bc_typed_constants' => 'As constantes de classe das extensões date, intl, pdo, reflection, spl, sqlite, xmlreader agora são tipadas.', + 'bc_mysqli_constants' => 'As constantes MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE e MYSQLI_TYPE_INTERVAL foram removidas.', + 'bc_mysqli_functions' => 'As funções mysqli_ping(), mysqli_kill(), mysqli_refresh(), os métodos mysqli::ping(), mysqli::kill(), mysqli::refresh() e as constantes MYSQLI_REFRESH_* estão obsoletas.', + 'bc_standard' => 'stream_bucket_make_writeable() e stream_bucket_new() agora retornam uma instância de StreamBucket em vez de stdClass.', + 'bc_core' => 'Alteração de comportamento no uso de exit().', + 'bc_warnings' => 'A constante E_STRICT está obsoleta.', + + 'footer_title' => 'Melhor desempenho, sintaxe aprimorada e maior segurança de tipos.', + 'footer_description' => '

Para baixar o código-fonte do PHP 8.4, visite a página de downloads. Os binários para Windows podem ser encontrados no site PHP for Windows. A lista de alterações está registrada no ChangeLog.

+

O guia de migração está disponível no Manual do PHP. Consulte-o para uma lista detalhada de novos recursos e mudanças incompatíveis com versões anteriores.

', +]; diff --git a/releases/8.4/languages/ru.php b/releases/8.4/languages/ru.php new file mode 100644 index 0000000000..ef4a077d80 --- /dev/null +++ b/releases/8.4/languages/ru.php @@ -0,0 +1,55 @@ + 'PHP 8.4 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.4 — большое обновление языка PHP.
Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.4!', + + 'property_hooks_title' => 'Хуки свойств', + 'property_hooks_description' => 'Хуки свойств обеспечивают поддержку вычисляемых свойств, которые могут быть понятны IDE и инструментам статического анализа, без необходимости писать DocBlock-комментарии, которые могут не совпадать. Кроме того, они позволяют выполнять надёжную предварительную или последующую обработку значений, без необходимости проверять, существует ли в классе соответствующий геттер или сеттер.', + 'asymmetric_visibility_title' => 'Асимметричная область видимости свойств', + 'asymmetric_visibility_description' => 'Область видимости записи свойства теперь может контролироваться независимо от области видимости чтения свойства, что уменьшает необходимость использования шаблонных методов-геттеров для раскрытия значения свойства без возможности его изменения извне класса.', + 'deprecated_attribute_title' => 'Атрибут #[\Deprecated]', + 'deprecated_attribute_description' => 'Новый атрибут #[\Deprecated] расширяет существующий механизм объявления сущности устаревшей для пользовательских функций, методов и констант классов.', + 'dom_additions_html5_title' => 'Новые возможности ext-dom и поддержка HTML5', + 'dom_additions_html5_description' => '

Новый DOM API, который поддерживает разбор HTML5-документов в соответствии со стандартами, исправляет несколько давних ошибок в поведении DOM и добавляет несколько функций, делающих работу с документами более удобной.

Новый DOM API доступен в пространстве имён Dom. Документы, использующие новый DOM API, могут быть созданы с помощью классов Dom\HTMLDocument и Dom\XMLDocument.

', + 'new_array_find_title' => 'Новые функции array_*()', + 'new_array_find_description' => 'Добавлены функции array_find(), array_find_key(), array_any() и array_all().', + 'pdo_driver_specific_parsers_title' => 'SQL-парсеры, специфичные для драйверов PDO', + 'pdo_driver_specific_parsers_description' => 'Добавлены дочерние классы Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Sqlite драйверов, наследующие PDO.', + 'new_without_parentheses_title' => 'new MyClass()->method() без скобок', + 'new_without_parentheses_description' => 'К свойствам и методам только что инициализированного объекта теперь можно обращаться, не оборачивая выражение new в круглые скобки.', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_jit_implementation' => 'Новая реализация JIT на основе IR Framework', + 'new_core_functions' => 'Добавлена функция request_parse_body().', + 'new_bcmath_functions' => 'Добавлены функции bcceil(), bcdivmod(), bcfloor() и bcround().', + 'new_round_modes' => 'Добавлено перечисление RoundingMode для функции round() с 4 режимами: TowardsZero, AwayFromZero, NegativeInfinity и PositiveInfinity.', + 'new_date_functions' => 'Добавлены методы DateTime::createFromTimestamp(), DateTime::getMicrosecond(), DateTime::setMicrosecond(), DateTimeImmutable::createFromTimestamp(), DateTimeImmutable::getMicrosecond() и DateTimeImmutable::setMicrosecond().', + 'new_mb_functions' => 'Добавлены функции mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() и mb_lcfirst().', + 'new_pcntl_functions' => 'Добавлены функции pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns() и pcntl_waitid().', + 'new_reflection_functions' => 'Добавлены методы ReflectionClassConstant::isDeprecated(), ReflectionGenerator::isClosed() и ReflectionProperty::isDynamic().', + 'new_standard_functions' => 'Добавлены функции http_get_last_response_headers(), http_clear_last_response_headers(), fpow().', + 'new_xml_functions' => 'Добавлены методы XMLReader::fromStream(), XMLReader::fromUri(), XMLReader::fromString(), XMLWriter::toStream(), XMLWriter::toUri() и XMLWriter::toMemory().', + 'new_grapheme_function' => 'Добавлена функция grapheme_str_split().', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_pecl' => 'Модули IMAP, OCI8, PDO_OCI и pspell перенесены из ядра в PECL.', + 'bc_nullable_parameter_types' => 'Типы параметров, неявно допускающие значение null объявлены устаревшими.', + 'bc_classname' => 'Использование _ в качестве имени класса объявлено устаревшим.', + 'bc_zero_raised_to_negative_number' => 'Возведение нуля в степень отрицательного числа объявлено устаревшим.', + 'bc_gmp' => 'Класс GMP теперь является окончательным.', + 'bc_round' => 'Передача некорректного режима в функцию round() выбрасывает ошибку ValueError.', + 'bc_typed_constants' => 'Константы классов модулей date, intl, pdo, reflection, spl, sqlite и xmlreader типизированы.', + 'bc_mysqli_constants' => 'Удалены константы MYSQLI_SET_CHARSET_DIR, MYSQLI_STMT_ATTR_PREFETCH_ROWS, MYSQLI_CURSOR_TYPE_FOR_UPDATE, MYSQLI_CURSOR_TYPE_SCROLLABLE и MYSQLI_TYPE_INTERVAL.', + 'bc_mysqli_functions' => 'Функции mysqli_ping(), mysqli_kill(), mysqli_refresh(), методы mysqli::ping(), mysqli::kill(), mysqli::refresh() и константы MYSQLI_REFRESH_* объявлены устаревшими.', + 'bc_standard' => 'Функции stream_bucket_make_writeable() и stream_bucket_new() теперь возвращают экземпляр класса StreamBucket вместо stdClass.', + 'bc_core' => 'Изменение поведения языковой конструкции exit().', + 'bc_warnings' => 'Константа E_STRICT объявлена устаревшей.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

Для загрузки исходного кода PHP 8.3 посетите страницу Downloads. Бинарные файлы Windows находятся на сайте PHP for Windows. Список изменений перечислен на странице ChangeLog.

+

Руководство по миграции доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.

', +]; diff --git a/releases/8.4/nl.php b/releases/8.4/nl.php new file mode 100644 index 0000000000..1a972eecb8 --- /dev/null +++ b/releases/8.4/nl.php @@ -0,0 +1,6 @@ + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+

+ + RFC + +

+
+
+
PHP < 8.4
+
+ setLanguageCode($languageCode); + $this->setCountryCode($countryCode); + } + + public function getLanguageCode(): string + { + return $this->languageCode; + } + + public function setLanguageCode(string $languageCode): void + { + $this->languageCode = $languageCode; + } + + public function getCountryCode(): string + { + return $this->countryCode; + } + + public function setCountryCode(string $countryCode): void + { + $this->countryCode = strtoupper($countryCode); + } + + public function setCombinedCode(string $combinedCode): void + { + [$languageCode, $countryCode] = explode('_', $combinedCode, 2); + + $this->setLanguageCode($languageCode); + $this->setCountryCode($countryCode); + } + + public function getCombinedCode(): string + { + return \sprintf("%s_%s", $this->languageCode, $this->countryCode); + } +} + +$brazilianPortuguese = new Locale('pt', 'br'); +var_dump($brazilianPortuguese->getCountryCode()); // BR +var_dump($brazilianPortuguese->getCombinedCode()); // pt_BR +PHP + + ); ?> +
+
+
+
+
PHP 8.4
+
+ countryCode = strtoupper($countryCode); + } + } + + public string $combinedCode + { + get => \sprintf("%s_%s", $this->languageCode, $this->countryCode); + set (string $value) { + [$this->countryCode, $this->languageCode] = explode('_', $value, 2); + } + } + + public function __construct(string $languageCode, string $countryCode) + { + $this->languageCode = $languageCode; + $this->countryCode = $countryCode; + } +} + +$brazilianPortuguese = new Locale('pt', 'br'); +var_dump($brazilianPortuguese->countryCode); // BR +var_dump($brazilianPortuguese->combinedCode); // pt_BR +PHP + ); ?> +
+
+
+
+ +
+
+
+

+ + RFC + +

+
+
+
PHP < 8.4
+
+ version); // string(3) "8.3" +$phpVersion->version = 'PHP 8.4'; // No error +PHP + + ); ?> +
+
+
+
+
PHP 8.4
+
+ version); // string(3) "8.4" +$phpVersion->version = 'PHP 8.3'; // Visibility error +PHP + ); ?> +
+
+
+
+ +
+
+
+

+ + RFC + +

+
+
+
PHP < 8.4
+
+ getVersion(); + } + + public function getVersion(): string + { + return '8.3'; + } +} + +$phpVersion = new PhpVersion(); +// No indication that the method is deprecated. +echo $phpVersion->getPhpVersion(); +PHP + + ); ?> +
+
+
+
+
PHP 8.4
+
+ getVersion(); + } + + public function getVersion(): string + { + return '8.4'; + } +} + +$phpVersion = new PhpVersion(); +// Deprecated: Method PhpVersion::getPhpVersion() is deprecated since 8.4, use PhpVersion::getVersion() instead +echo $phpVersion->getPhpVersion(); +PHP + ); ?> +
+
+
+
+ +
+
+
+

+ + RFC + RFC + +

+
+
+
PHP < 8.4
+
+ loadHTML( + <<<'HTML' +
+
PHP 8.4 is a feature-rich release!
+ +
+ HTML, + LIBXML_NOERROR, +); + +$xpath = new DOMXPath($dom); +$node = $xpath->query(".//main/article[not(following-sibling::*)]")[0]; +$classes = explode(" ", $node->className); // Simplified +var_dump(in_array("featured", $classes)); // bool(true) +PHP + + ); ?> +
+
+
+
+
PHP 8.4
+
+ +
PHP 8.4 is a feature-rich release!
+ + + HTML, + LIBXML_NOERROR, +); + +$node = $dom->querySelector('main > article:last-child'); +var_dump($node->classList->contains("featured")); // bool(true) +PHP + ); ?> +
+
+
+
+ +
+
+
+

+ + RFC +

+
+
+
PHP < 8.4
+
+ +
+
+
+
+
PHP 8.4
+
+ +
+
+
+
+ +
+
+
+

+ + RFC +

+
+
+
PHP < 8.4
+
+ sqliteCreateFunction( + 'prepend_php', + static fn ($string) => "PHP {$string}", +); + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> +
+
+
+
+
PHP 8.4
+
+ createFunction( + 'prepend_php', + static fn ($string) => "PHP {$string}", +); // Does not exist on a mismatching driver. + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> +
+
+
+
+ +
+
+
+

+ + RFC + +

+
+
+
PHP < 8.4
+
+ getVersion()); +PHP + + ); ?> +
+
+
+
+
PHP 8.4
+
+ getVersion()); +PHP + ); ?> +
+
+
+
+ +
+
+ +
+ +
+
+

+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
+ +
+

+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
+
+ + + +