Author: Sergey Panteleev (saundefined) Committer: GitHub (web-flow) Pusher: saundefined Date: 2024-11-19T20:34:44+03:00
Commit: https://github.com/php/web-php/commit/039acc1453f2348f10545e58cf1bca833407e6b7 Raw diff: https://github.com/php/web-php/commit/039acc1453f2348f10545e58cf1bca833407e6b7.diff Preparing PHP 8.4 announcement page (#1079) Co-authored-by: Tim Düsterhus <t...@bastelstu.be> Co-authored-by: Gina Peter Banyard <girg...@php.net> Co-authored-by: Jorg Adam Sowa <jorg.s...@gmail.com> Co-authored-by: Tim Düsterhus <timwo...@googlemail.com> Co-authored-by: Niels Dossche <7771979+niels...@users.noreply.github.com> Co-authored-by: Roman Pronskiy <ro...@pronskiy.com> Co-authored-by: Theodore Brown <theodor...@outlook.com> Co-authored-by: Marcos Marcolin <mar...@ixcsoft.com.br> Co-authored-by: andresayac <andresa...@gmail.com> Co-authored-by: Marcos Marcolin <48370677+marcosmarco...@users.noreply.github.com> Co-authored-by: Borislav Kosun <kosu...@yandex.com> Changed paths: A images/php8/logo_php8_4.svg A images/php8/php_8_4_released.png A releases/8.4/common.php A releases/8.4/en.php A releases/8.4/es.php A releases/8.4/index.php A releases/8.4/languages/en.php A releases/8.4/languages/es.php A releases/8.4/languages/nl.php A releases/8.4/languages/pt_BR.php A releases/8.4/languages/ru.php A releases/8.4/nl.php A releases/8.4/pt_BR.php A releases/8.4/release.inc A releases/8.4/ru.php M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png M tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png Diff: 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 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="451" height="127" fill="none" viewBox="0 0 451 127"> + <path fill="#fff" fill-rule="evenodd" d="M21.7998 125.799h-21l18.7-96.0998h40.3c12.1 0 21 3.2 26.5 9.5 5.6 6.4 7.2 15.2 5 26.7-.9 4.7-2.5 9-4.6 12.9-2.2 3.9-5 7.5-8.5 10.7-4.2 3.9-8.8 6.7-13.9 8.4-5.1 1.7-11.6 2.4998-19.6 2.4998h-18l-4.9 25.4Zm45.9-76.5998c-2.7-2.9-8-4.4-15.9-4.4h-14.3l-7.8 40.3h12.7c8.4 0 14.7-1.6 18.9-4.8 4.1-3.2 6.9-8.5 8.4-15.9 1.3-7.2.6-12.2-2-15.2Z" clip-rule="evenodd"/> + <path fill="#fff" d="M106.6 4.09961h20.8l-5 25.59999h18.5c11.7 0 19.7 2 24.1 6.1 4.4 4.1 5.8 10.7 4 19.8L160.3 100.4h-21.1l8.3-42.6004c.9-4.8.6-8.1-1-9.9-1.6-1.8-5.1-2.6-10.4-2.6h-16.6L108.8 100.4H87.9004L106.6 4.09961Z"/> + <path fill="#fff" fill-rule="evenodd" d="M185.2 125.799h-21l18.7-96.0998h40.4c12.1 0 21 3.2 26.5 9.5 5.6 6.4 7.2 15.2 5 26.7-.9 4.7-2.5 9-4.6 12.9-2.2 3.9-5 7.5-8.5 10.7-4.2 3.9-8.8 6.7-13.9 8.4-5.1 1.7-11.6 2.4998-19.6 2.4998h-18l-5 25.4Zm46-76.5998c-2.7-2.9-8-4.4-15.9-4.4h-14.4l-7.8 40.3h12.7c8.4 0 14.7-1.6 18.9-4.8 4.1-3.2 6.9-8.5 8.4-15.9 1.3-7.2.7-12.2-1.9-15.2Z" clip-rule="evenodd"/> + <path fill="#fff" d="M317.5 48.5c-5.7-13.6-10.5-25.4-5.8-33.6 1.8-2.5 3.8-3.8 6-3.8 4.5 0 8.6 4.9 8.6 4.9l5.7 6.9-3.6-8.2c-.2-.3-6.3-14.2-17.2-14.2-3.8 0-7.8 1.7-11.7 5.1l-.1.1c-9.5 11-.2 31.8 8.1 50.1l6.1 14.2c2.8 7.3 5.6 16 3.9 22.4-2.6 10-11.5 16.8-11.6 16.9l-5.7 4.4 6.9-2.2c.7-.2 16-5.2 19.7-18.5 2.3-10.9-.6-21.8-3.5-30.2.4-.3-.4.3 0 0L318 49.1"/> + <path fill="#0F0F0F" d="m334.4 9.89961-7.1-7.8 5.1 9.29999c.1.1 6.3 11.7-1.6 25.2-2.9 4.2-7.4 8.4-13.1 12.6l-10.3 6.7c-.1-.1-.1-.2 0 0l-.4.3c-11.5 6.6-22.2 10.6-22.4 10.7-15.9 7.1-25.9 18.1-27.3 30.3-1.1 9.2004 3.2 18.2004 11.6 24.5004l.1.1c5.3 3.2 11 4.8 17 4.8 15.7 0 28-10.9 28.5-11.4l7.7-6.9-9.1 4.8c-.1 0-7.7 4-15.6 4-7.1 0-12.1-3.1-15.1-9.4-3.8-13.4004 9.5-22.6004 24.8-33.2004 2-1.4 4.1-2.9 6.2-4.3l.1-.1 9.1-6.8c.1-.2.4-.4.4-.4 7.5-6.2 17.4-15.9 19.7-29.5 1.8-12.3-7.9-23-8.3-23.49999Z"/> + <path fill="#fff" d="M345.4 83h19.5l-3.5 17.7h-19.5l3.5-17.7Z"/> + <path fill="#fff" d="M423.85546875,50.75292969c1.28125-6.44580078,2.85058594-13.86523438,4.17089844-19.10791016h-.53613281c-3.71289062,4.95507812-7.65429688,10.38720703-11.63574219,15.09375l-16.53515625,18.59521484h49.98535156l-3.00097656,15.17285156h-70.05371094l2.71289062-13.81347656,45.89941406-51.03125h24.03125l-16.90429688,85.03613281h-17.86621094l9.73242188-49.9453125Z"/> +</svg> 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 @@ +<?php + +declare(strict_types=1); + +namespace releases\php84; + +include_once __DIR__ . '/../../include/prepend.inc'; + +const LANGUAGES = [ + 'en' => '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 +<meta name="twitter:card" content="summary_large_image" /> +<meta name="twitter:site" content="@official_php" /> +<meta name="twitter:title" content="PHP 8.4 Released" /> +<meta name="twitter:description" content="{$meta_description}" /> +<meta name="twitter:creator" content="@official_php" /> +<meta name="twitter:image:src" content="{$meta_image_path}" /> + +<meta itemprop="name" content="PHP 8.4 Released" /> +<meta itemprop="description" content="{$meta_description}" /> +<meta itemprop="image" content="{$meta_image_path}" /> + +<meta property="og:image" content="{$meta_image_path}" /> +<meta property="og:description" content="{$meta_description}" /> +META + ]); +} + +function language_chooser(string $currentLang): void { + // Print out the form with all the options + echo ' + <form action="" method="get" id="changelang" name="changelang"> + <fieldset> + <label for="changelang-langs">Change language:</label> + <select onchange="location = this.value + \'.php\'" name="lang" id="changelang-langs"> +'; + + $tab = ' '; + foreach (LANGUAGES as $lang => $text) { + $selected = ($lang === $currentLang) ? ' selected="selected"' : ''; + echo $tab, "<option value='$lang'$selected>$text</option>\n"; + } + + echo ' </select> + </fieldset> + </form> +'; +} + +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 @@ +<?php + +$lang = 'en'; + +include_once __DIR__ . '/release.inc'; diff --git a/releases/8.4/es.php b/releases/8.4/es.php new file mode 100644 index 0000000000..70a1a68670 --- /dev/null +++ b/releases/8.4/es.php @@ -0,0 +1,5 @@ +<?php + +$lang = 'es'; + +include_once __DIR__ . '/release.inc'; diff --git a/releases/8.4/index.php b/releases/8.4/index.php new file mode 100644 index 0000000000..ee9f915c90 --- /dev/null +++ b/releases/8.4/index.php @@ -0,0 +1,13 @@ +<?php + +use phpweb\LangChooser; +use const releases\php84\LANGUAGES; + +$_SERVER['BASE_PAGE'] = 'releases/8.4/index.php'; +require_once __DIR__ . '/common.php'; +require_once __DIR__ . '/../../src/autoload.php'; + +$langChooser = new LangChooser(LANGUAGES, [], "", ""); +[$lang,] = $langChooser->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 + +return [ + 'common_header' => '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.<br class="display-none-md"> 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' => '<code>#[\Deprecated]</code> Attribute', + 'deprecated_attribute_description' => 'The new <code>#[\Deprecated]</code> 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' => '<p>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.</p><p>The new DOM API is available within the <code>Dom</code> namespace. Documents using the new DOM API can be created using the <code>Dom\HTMLDocument</code> and <code>Dom\XMLDocument</code> classes.</p>', + 'new_array_find_title' => 'New <code>array_*()</code> functions', + 'new_array_find_description' => 'New functions <a href="/manual/en/function.array-find.php"><code>array_find()</code></a>, <a href="/manual/en/function.array-find-key.php"><code>array_find_key()</code></a>, <a href="/manual/en/function.array-any.php"><code>array_any()</code></a>, and <a href="/manual/en/function.array-all.php"><code>array_all()</code></a> are available.', + 'pdo_driver_specific_parsers_title' => 'PDO Driver specific SQL parsers', + 'pdo_driver_specific_parsers_description' => 'New subclasses <code>Pdo\Dblib</code>, <code>Pdo\Firebird</code>, <code>Pdo\MySql</code>, <code>Pdo\Odbc</code>, and <code>Pdo\Sqlite</code> of <code>PDO</code> are available.', + 'new_without_parentheses_title' => '<code>new MyClass()->method()</code> without parentheses', + 'new_without_parentheses_description' => 'Properties and methods of a newly instantiated object can now be accessed without wrapping the <code>new</code> 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 <code>request_parse_body()</code> function.', + 'new_bcmath_functions' => 'New <code>bcceil()</code>, <code>bcdivmod()</code>, <code>bcfloor()</code>, and <code>bcround()</code> functions.', + 'new_round_modes' => 'New <code>RoundingMode</code> enum for <code>round()</code> with 4 new rounding modes <code>TowardsZero</code>, <code>AwayFromZero</code>, <code>NegativeInfinity</code>, and <code>PositiveInfinity</code>.', + 'new_date_functions' => 'New <code>DateTime::createFromTimestamp()</code>, <code>DateTime::getMicrosecond()</code>, <code>DateTime::setMicrosecond()</code>, <code>DateTimeImmutable::createFromTimestamp()</code>, <code>DateTimeImmutable::getMicrosecond()</code>, and <code>DateTimeImmutable::setMicrosecond()</code> methods.', + 'new_mb_functions' => 'New <code>mb_trim()</code>, <code>mb_ltrim()</code>, <code>mb_rtrim()</code>, <code>mb_ucfirst()</code>, and <code>mb_lcfirst()</code> functions.', + 'new_pcntl_functions' => 'New <code>pcntl_getcpu()</code>, <code>pcntl_getcpuaffinity()</code>, <code>pcntl_getqos_class()</code>, <code>pcntl_setns()</code>, and <code>pcntl_waitid()</code> functions.', + 'new_reflection_functions' => 'New <code>ReflectionClassConstant::isDeprecated()</code>, <code>ReflectionGenerator::isClosed()</code>, and <code>ReflectionProperty::isDynamic()</code> methods.', + 'new_standard_functions' => 'New <code>http_get_last_response_headers()</code>, <code>http_clear_last_response_headers()</code>, and <code>fpow()</code> functions.', + 'new_xml_functions' => 'New <code>XMLReader::fromStream()</code>, <code>XMLReader::fromUri()</code>, <code>XMLReader::fromString()</code>, <code>XMLWriter::toStream()</code>, <code>XMLWriter::toUri()</code>, and <code>XMLWriter::toMemory()</code> methods.', + 'new_grapheme_function' => 'New <code>grapheme_str_split()</code> 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 <code>_</code> 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' => '<code>GMP</code> class is now final.', + 'bc_round' => 'Passing invalid mode to <code>round()</code> throws <code>ValueError</code>.', + 'bc_typed_constants' => 'Class constants from extensions <code>date</code>, <code>intl</code>, <code>pdo</code>, <code>reflection</code>, <code>spl</code>, <code>sqlite</code>, <code>xmlreader</code> are typed now.', + 'bc_mysqli_constants' => '<code>MYSQLI_SET_CHARSET_DIR</code>, <code>MYSQLI_STMT_ATTR_PREFETCH_ROWS</code>, <code>MYSQLI_CURSOR_TYPE_FOR_UPDATE</code>, <code>MYSQLI_CURSOR_TYPE_SCROLLABLE</code>, and <code>MYSQLI_TYPE_INTERVAL</code> constants have been removed.', + 'bc_mysqli_functions' => '<code>mysqli_ping()</code>, <code>mysqli_kill()</code>, <code>mysqli_refresh()</code> functions, <code>mysqli::ping()</code>, <code>mysqli::kill()</code>, <code>mysqli::refresh()</code> methods, and <code>MYSQLI_REFRESH_*</code> constants have been deprecated.', + 'bc_standard' => '<code>stream_bucket_make_writeable()</code> and <code>stream_bucket_new()</code> now return an instance of <code>StreamBucket</code> instead of <code>stdClass</code>.', + 'bc_core' => '<a href="/manual/en/migration84.incompatible.php#migration84.incompatible.core.exit"><code>exit()</code> behavioral change</a>.', + 'bc_warnings' => '<code>E_STRICT</code> constant has been deprecated.', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '<p>For source downloads of PHP 8.4 please visit the <a href="/downloads">downloads</a> page. Windows binaries can be found on the <a href="https://windows.php.net/download">PHP for Windows</a> site. The list of changes is recorded in the <a href="/ChangeLog-8.php#PHP_8_4">ChangeLog</a>.</p> + <p>The <a href="/manual/en/migration84.php">migration guide</a> is available in the PHP Manual. Please consult it for a detailed list of new features and backward-incompatible changes.</p>', +]; 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 + +return [ + 'common_header' => '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.<br class="display-none-md"> 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 <code>#[\Deprecated]</code>', + 'deprecated_attribute_description' => 'El nuevo atributo <code>#[\Deprecated]</code> 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' => '<p>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.</p><p>La nueva API DOM está disponible dentro del espacio de nombres <code>Dom</code>. Los documentos que utilizan la nueva API DOM pueden ser creados utilizando las clases <code>Dom\HTMLDocument</code> y <code>Dom\XMLDocument</code>.', + 'new_array_find_title' => 'Nuevas funciones <code>array_*()</code>', + 'new_array_find_description' => 'Nuevas funciones disponibles: <a href="/manual/es/function.array-find.php"><code>array_find()</code></a>, <a href="/manual/es/function.array-find-key.php"><code>array_find_key()</code></a>, <a href="/manual/es/function.array-any.php"><code>array_any()</code></a> y <a href="/manual/es/function.array-all.php"><code>array_all()</code></a>.', + 'pdo_driver_specific_parsers_title' => 'Procesadores SQL específicos para PDO Driver', + 'pdo_driver_specific_parsers_description' => 'Nuevas subclases de <code>PDO</code>: <code>Pdo\Dblib</code>, <code>Pdo\Firebird</code>, <code>Pdo\MySql</code>, <code>Pdo\Odbc</code>, <code>Pdo\Sqlite</code> están disponibles.', + 'new_without_parentheses_title' => '<code>new MyClass()->method()</code> 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 <code>new</code> 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 <code>request_parse_body()</code>.', + 'new_bcmath_functions' => 'Nuevas funciones: <code>bcceil()</code>, <code>bcdivmod()</code>, <code>bcfloor()</code> y <code>bcround()</code>.', + 'new_round_modes' => 'Nuevo enum <code>RoundingMode</code> para <code>round()</code> con 4 nuevos modos de redondeo: <code>TowardsZero</code>, <code>AwayFromZero</code>, <code>NegativeInfinity</code> y <code>PositiveInfinity</code>.', + 'new_date_functions' => 'Nuevos métodos: <code>DateTime::createFromTimestamp()</code>, <code>DateTime::getMicrosecond()</code>, <code>DateTime::setMicrosecond()</code>, <code>DateTimeImmutable::createFromTimestamp()</code>, <code>DateTimeImmutable::getMicrosecond()</code>, y <code>DateTimeImmutable::setMicrosecond()</code>.', + 'new_mb_functions' => 'Nuevas funciones: <code>mb_trim()</code>, <code>mb_ltrim()</code>, <code>mb_rtrim()</code>, <code>mb_ucfirst()</code>, y <code>mb_lcfirst()</code>.', + 'new_pcntl_functions' => 'Nuevas funciones: <code>pcntl_getcpu()</code>, <code>pcntl_getcpuaffinity()</code>, <code>pcntl_getqos_class()</code>, <code>pcntl_setns()</code> y <code>pcntl_waitid()</code>.', + 'new_reflection_functions' => 'Nuevos métodos: <code>ReflectionClassConstant::isDeprecated()</code>, <code>ReflectionGenerator::isClosed()</code>, y <code>ReflectionProperty::isDynamic()</code>.', + 'new_standard_functions' => 'Nuevas funciones: <code>http_get_last_response_headers()</code>, <code>http_clear_last_response_headers()</code> y <code>fpow()</code>.', + 'new_xml_functions' => 'Nuevos métodos: <code>XMLReader::fromStream()</code>, <code>XMLReader::fromUri()</code>, <code>XMLReader::fromString()</code>, <code>XMLWriter::toStream()</code>, <code>XMLWriter::toUri()</code> y <code>XMLWriter::toMemory()</code>.', + 'new_grapheme_function' => 'Nueva función <code>grapheme_str_split()</code>.', + + '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 <code>_</code> 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 <code>GMP</code> ahora es final.', + 'bc_round' => 'Pasar un modo inválido a <code>round()</code> lanza un <code>ValueError</code>.', + 'bc_typed_constants' => 'Las constantes de clase de las extensiones <code>date</code>, <code>intl</code>, <code>pdo</code>, <code>reflection</code>, <code>spl</code>, <code>sqlite</code>, <code>xmlreader</code> ahora tienen tipos.', + 'bc_mysqli_constants' => 'Los constantes <code>MYSQLI_SET_CHARSET_DIR</code>, <code>MYSQLI_STMT_ATTR_PREFETCH_ROWS</code>, <code>MYSQLI_CURSOR_TYPE_FOR_UPDATE</code>, <code>MYSQLI_CURSOR_TYPE_SCROLLABLE</code>, y <code>MYSQLI_TYPE_INTERVAL</code> han sido eliminadas.', + 'bc_mysqli_functions' => 'Las funciones <code>mysqli_ping()</code>, <code>mysqli_kill()</code>, <code>mysqli_refresh()</code>, los métodos <code>mysqli::ping()</code>, <code>mysqli::kill()</code>, <code>mysqli::refresh()</code>, y los constantes <code>MYSQLI_REFRESH_*</code> están en desuso.', + 'bc_standard' => '<code>stream_bucket_make_writeable()</code> y <code>stream_bucket_new()</code> ahora devuelven una instancia de <code>StreamBucket</code> en lugar de <code>stdClass</code>.', + 'bc_core' => 'Cambio en el comportamiento de <a href="/manual/es/migration84.incompatible.php#migration84.incompatible.core.exit"><code>exit()</code></a>.', + 'bc_warnings' => 'El constante <code>E_STRICT</code> está en desuso.', + + 'footer_title' => 'Mejor rendimiento, mejor sintaxis, mejor seguridad de tipos.', + 'footer_description' => '<p>Para descargar el código fuente de PHP 8.4, por favor visita la página de <a href="/downloads">descargas</a>. Los binarios para Windows se encuentran en el sitio <a href="https://windows.php.net/download">PHP para Windows</a>. La lista de cambios está registrada en el <a href="/ChangeLog-8.php#PHP_8_4">ChangeLog</a>.</p> + <p>La <a href="/manual/en/migration84.php">guía de migración</a> 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.</p>', +]; 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 + +return [ + 'common_header' => '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.<br class="display-none-md"> 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' => '<code>#[\Deprecated]</code> attribuut', + 'deprecated_attribute_description' => 'Het nieuwe <code>#[\Deprecated]</code> 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' => '<p>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.</p><p>De nieuwe DOM API is beschikbaar via de <code>Dom</code> namespace. Documenten die de nieuwe API willen gebruiken, kunnen aangemaakt worden via de <code>Dom\HTMLDocument</code> en <code>Dom\XMLDocument</code> klassen.</p>', + 'new_array_find_title' => 'Nieuwe <code>array_*()</code> functies', + 'new_array_find_description' => 'Nieuwe functies <a href="/manual/en/function.array-find.php"><code>array_find()</code></a>, <a href="/manual/en/function.array-find-key.php"><code>array_find_key()</code></a>, <a href="/manual/en/function.array-any.php"><code>array_any()</code></a>, en <a href="/manual/en/function.array-all.php"><code>array_all()</code></a> zijn nu beschikbaar.', + 'pdo_driver_specific_parsers_title' => 'PDO driver specifieke SQL parsers', + 'pdo_driver_specific_parsers_description' => 'Nieuwe subklassen <code>Pdo\Dblib</code>, <code>Pdo\Firebird</code>, <code>Pdo\MySql</code>, <code>Pdo\Odbc</code>, <code>Pdo\Sqlite</code> van <code>PDO</code> zijn nu beschikbaar.', + 'new_without_parentheses_title' => '<code>new MyClass()->method()</code> zonder haakjes', + 'new_without_parentheses_description' => 'Eigenschappen en methoden van een nieuw geïnstantieerd object kunnen nu opgevraagd worden zonder de <code>new</code> expressie tussen haakjes te zetten.', + + 'new_classes_title' => 'Nieuwe klassen, interfaces en functies', + 'new_core_functions' => 'Nieuwe <code>request_parse_body()</code> functie.', + 'new_bcmath_functions' => 'Nieuwe <code>bcceil()</code>, <code>bcdivmod()</code>, <code>bcfloor()</code>, en <code>bcround()</code> functies.', + 'new_round_modes' => 'Nieuwe <code>RoundingMode</code> enum voor <code>round()</code> met 4 nieuwe afrondingsmodi <code>TowardsZero</code>, <code>AwayFromZero</code>, <code>NegativeInfinity</code>, en <code>PositiveInfinity</code>.', + 'new_date_functions' => 'Nieuwe <code>DateTime::createFromTimestamp()</code>, <code>DateTime::getMicrosecond()</code>, <code>DateTime::setMicrosecond()</code>, <code>DateTimeImmutable::createFromTimestamp()</code>, <code>DateTimeImmutable::getMicrosecond()</code>, en <code>DateTimeImmutable::setMicrosecond()</code> methoden.', + 'new_mb_functions' => 'Nieuwe <code>mb_trim()</code>, <code>mb_ltrim()</code>, <code>mb_rtrim()</code>, <code>mb_ucfirst()</code>, en <code>mb_lcfirst()</code> functies.', + 'new_pcntl_functions' => 'Nieuwe <code>pcntl_getcpu()</code>, <code>pcntl_getcpuaffinity()</code>, <code>pcntl_getqos_class()</code>, <code>pcntl_setns()</code>, en <code>pcntl_waitid()</code> functies.', + 'new_reflection_functions' => 'Nieuwe <code>ReflectionClassConstant::isDeprecated()</code>, <code>ReflectionGenerator::isClosed()</code>, en <code>ReflectionProperty::isDynamic()</code> methoden.', + 'new_standard_functions' => 'Nieuwe <code>http_get_last_response_headers()</code>, <code>http_clear_last_response_headers()</code>, en <code>fpow()</code> functies.', + 'new_xml_functions' => 'Nieuwe <code>XMLReader::fromStream()</code>, <code>XMLReader::fromUri()</code>, <code>XMLReader::fromString()</code>, <code>XMLWriter::toStream()</code>, <code>XMLWriter::toUri()</code>, en <code>XMLWriter::toMemory()</code> 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 <code>_</code> als een klassenaam is nu uitgefaseerd.', + 'bc_zero_raised_to_negative_number' => 'Nul verheffen tot een negatieve macht is nu uitgefaseerd.', + 'bc_gmp' => '<code>GMP</code> klasse is nu final.', + 'bc_round' => 'Ongeldige modus doorgeven aan <code>round()</code> resulteert in een <code>ValueError</code>.', + 'bc_typed_constants' => 'Klasseconstanten van extensies <code>date</code>, <code>intl</code>, <code>pdo</code>, <code>reflection</code>, <code>spl</code>, <code>sqlite</code>, <code>xmlreader</code> hebben nu types.', + 'bc_mysqli_constants' => '<code>MYSQLI_SET_CHARSET_DIR</code>, <code>MYSQLI_STMT_ATTR_PREFETCH_ROWS</code>, <code>MYSQLI_CURSOR_TYPE_FOR_UPDATE</code>, <code>MYSQLI_CURSOR_TYPE_SCROLLABLE</code>, en <code>MYSQLI_TYPE_INTERVAL</code> constanten zijn verwijderd.', + 'bc_mysqli_functions' => '<code>mysqli_ping()</code>, <code>mysqli_kill()</code>, <code>mysqli_refresh()</code> functies, <code>mysqli::ping()</code>, <code>mysqli::kill()</code>, <code>mysqli::refresh()</code> methoden, en <code>MYSQLI_REFRESH_*</code> constanten zijn uitgefaseerd.', + 'bc_standard' => '<code>stream_bucket_make_writeable()</code> en <code>stream_bucket_new()</code> geven nu een instantie van <code>StreamBucket</code> terug in plaats van <code>stdClass</code>.', + 'bc_core' => '<a href="/manual/en/migration84.incompatible.php#migration84.incompatible.core.exit"><code>exit()</code> heeft ander gedrag</a>.', + 'bc_warnings' => '<code>E_STRICT</code> constante is uitgefaseerd.', + + 'footer_title' => 'Betere prestaties, betere syntaxis, verbeterd type systeem.', + 'footer_description' => '<p>Ga naar de <a href="http://www.php.net/downloads">downloads</a> pagina om de PHP 8.4 code te verkrijgen. Uitvoerbare bestanden voor Windows kan je vinden op de <a href="http://windows.php.net/download">PHP voor Windows</a> website. De volledige lijst met wijzigingen is vastgelegd in een <a href="http://www.php.net/ChangeLog-8.php#PHP_8_4">ChangeLog</a>.</p> + <p>De <a href="/manual/en/migration84.php">migratie gids</a> is beschikbaar in de PHP Handleiding. Gebruik deze om een gedetailleerde lijst te krijgen van nieuwe opties en neerwaarts incompatibele aanpassingen.</p>', +]; 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 + +return [ + 'common_header' => '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.<br class="display-none-md"> 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' => '<code>#[\Deprecated]</code> Atributo', + 'deprecated_attribute_description' => 'O novo atributo <code>#[\Deprecated]</code> 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 <code>Dom\HTMLDocument</code>, <code>Dom\XMLDocument</code> e métodos <code>DOMNode::compareDocumentPosition()</code>, <code>DOMXPath::registerPhpFunctionNS()</code>, <code>DOMXPath::quote()</code>, <code>XSLTProcessor::registerPHPFunctionNS()</code> estão disponíveis.', + 'new_array_find_title' => 'Novas funções <code>array_*()</code>', + 'new_array_find_description' => 'Novas funções <a href="/manual/pt_BR/function.array-find.php"><code>array_find()</code></a>, <a href="/manual/pt_BR/function.array-find-key.php"><code>array_find_key()</code></a>, <a href="/manual/pt_BR/function.array-any.php"><code>array_any()</code></a> e <a href="/manual/pt_BR/function.array-all.php"><code>array_all()</code></a> estão disponíveis.', + 'pdo_driver_specific_parsers_title' => 'Parsers SQL específicos para drivers PDO', + 'pdo_driver_specific_parsers_description' => 'Novas subclasses <code>Pdo\Dblib</code>, <code>Pdo\Firebird</code>, <code>Pdo\MySql</code>, <code>Pdo\Odbc</code>, <code>Pdo\Sqlite</code> de <code>PDO</code> estão disponíveis.', + 'new_without_parentheses_title' => '<code>new MyClass()->method()</code> 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 <code>new</code> 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 <code>request_parse_body()</code>.', + 'new_bcmath_functions' => 'Novas funções <code>bcceil()</code>, <code>bcdivmod()</code>, <code>bcfloor()</code> e <code>bcround()</code>.', + 'new_round_modes' => 'Novo Enum <code>RoundingMode</code> para <code>round()</code> com 4 novos modos de arredondamento: <code>TowardsZero</code>, <code>AwayFromZero</code>, <code>NegativeInfinity</code> e <code>PositiveInfinity</code>.', + 'new_date_functions' => 'Novos métodos <code>DateTime::createFromTimestamp()</code>, <code>DateTime::getMicrosecond()</code>, <code>DateTime::setMicrosecond()</code>, <code>DateTimeImmutable::createFromTimestamp()</code>, <code>DateTimeImmutable::getMicrosecond()</code> e <code>DateTimeImmutable::setMicrosecond()</code>.', + 'new_mb_functions' => 'Novas funções <code>mb_trim()</code>, <code>mb_ltrim()</code>, <code>mb_rtrim()</code>, <code>mb_ucfirst()</code> e <code>mb_lcfirst()</code>.', + 'new_pcntl_functions' => 'Novas funções <code>pcntl_getcpu()</code>, <code>pcntl_getcpuaffinity()</code>, <code>pcntl_getqos_class()</code>, <code>pcntl_setns()</code> e <code>pcntl_waitid()</code>.', + 'new_reflection_functions' => 'Novos métodos <code>ReflectionClassConstant::isDeprecated()</code>, <code>ReflectionGenerator::isClosed()</code> e <code>ReflectionProperty::isDynamic()</code>.', + 'new_standard_functions' => 'Novas funções <code>http_get_last_response_headers()</code>, <code>http_clear_last_response_headers()</code> e <code>fpow()</code>.', + 'new_xml_functions' => 'Novos métodos <code>XMLReader::fromStream()</code>, <code>XMLReader::fromUri()</code>, <code>XMLReader::fromString()</code>, <code>XMLWriter::toStream()</code>, <code>XMLWriter::toUri()</code> e <code>XMLWriter::toMemory()</code>.', + 'new_grapheme_function' => 'Nova função <code>grapheme_str_split()</code>.', + + '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 <code>_</code> 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 <code>GMP</code> agora é final.', + 'bc_round' => 'Passar um modo inválido para <code>round()</code> agora lança um <code>ValueError</code>.', + 'bc_typed_constants' => 'As constantes de classe das extensões <code>date</code>, <code>intl</code>, <code>pdo</code>, <code>reflection</code>, <code>spl</code>, <code>sqlite</code>, <code>xmlreader</code> agora são tipadas.', + 'bc_mysqli_constants' => 'As constantes <code>MYSQLI_SET_CHARSET_DIR</code>, <code>MYSQLI_STMT_ATTR_PREFETCH_ROWS</code>, <code>MYSQLI_CURSOR_TYPE_FOR_UPDATE</code>, <code>MYSQLI_CURSOR_TYPE_SCROLLABLE</code> e <code>MYSQLI_TYPE_INTERVAL</code> foram removidas.', + 'bc_mysqli_functions' => 'As funções <code>mysqli_ping()</code>, <code>mysqli_kill()</code>, <code>mysqli_refresh()</code>, os métodos <code>mysqli::ping()</code>, <code>mysqli::kill()</code>, <code>mysqli::refresh()</code> e as constantes <code>MYSQLI_REFRESH_*</code> estão obsoletas.', + 'bc_standard' => '<code>stream_bucket_make_writeable()</code> e <code>stream_bucket_new()</code> agora retornam uma instância de <code>StreamBucket</code> em vez de <code>stdClass</code>.', + 'bc_core' => '<a href="/manual/pt_BR/migration84.incompatible.php#migration84.incompatible.core.exit">Alteração de comportamento no uso de <code>exit()</code></a>.', + 'bc_warnings' => 'A constante <code>E_STRICT</code> está obsoleta.', + + 'footer_title' => 'Melhor desempenho, sintaxe aprimorada e maior segurança de tipos.', + 'footer_description' => '<p>Para baixar o código-fonte do PHP 8.4, visite a página de <a href="/downloads">downloads</a>. Os binários para Windows podem ser encontrados no site <a href="https://windows.php.net/download">PHP for Windows</a>. A lista de alterações está registrada no <a href="/ChangeLog-8.php#PHP_8_4">ChangeLog</a>.</p> + <p>O <a href="/manual/en/migration84.php">guia de migração</a> 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.</p>', +]; 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 + +return [ + 'common_header' => 'PHP 8.4 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.4 — большое обновление языка PHP.<br class="display-none-md"> Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.', + 'upgrade_now' => 'Переходите на PHP 8.4!', + + 'property_hooks_title' => 'Хуки свойств', + 'property_hooks_description' => 'Хуки свойств обеспечивают поддержку вычисляемых свойств, которые могут быть понятны IDE и инструментам статического анализа, без необходимости писать DocBlock-комментарии, которые могут не совпадать. Кроме того, они позволяют выполнять надёжную предварительную или последующую обработку значений, без необходимости проверять, существует ли в классе соответствующий геттер или сеттер.', + 'asymmetric_visibility_title' => 'Асимметричная область видимости свойств', + 'asymmetric_visibility_description' => 'Область видимости записи свойства теперь может контролироваться независимо от области видимости чтения свойства, что уменьшает необходимость использования шаблонных методов-геттеров для раскрытия значения свойства без возможности его изменения извне класса.', + 'deprecated_attribute_title' => 'Атрибут <code>#[\Deprecated]</code>', + 'deprecated_attribute_description' => 'Новый атрибут <code>#[\Deprecated]</code> расширяет существующий механизм объявления сущности устаревшей для пользовательских функций, методов и констант классов.', + 'dom_additions_html5_title' => 'Новые возможности ext-dom и поддержка HTML5', + 'dom_additions_html5_description' => '<p>Новый DOM API, который поддерживает разбор HTML5-документов в соответствии со стандартами, исправляет несколько давних ошибок в поведении DOM и добавляет несколько функций, делающих работу с документами более удобной.</p><p>Новый DOM API доступен в пространстве имён <code>Dom</code>. Документы, использующие новый DOM API, могут быть созданы с помощью классов <code>Dom\HTMLDocument</code> и <code>Dom\XMLDocument</code>.</p>', + 'new_array_find_title' => 'Новые функции <code>array_*()</code>', + 'new_array_find_description' => 'Добавлены функции <a href="/manual/ru/function.array-find.php"><code>array_find()</code></a>, <a href="/manual/ru/function.array-find-key.php"><code>array_find_key()</code></a>, <a href="/manual/ru/function.array-any.php"><code>array_any()</code></a> и <a href="/manual/ru/function.array-all.php"><code>array_all()</code></a>.', + 'pdo_driver_specific_parsers_title' => 'SQL-парсеры, специфичные для драйверов PDO', + 'pdo_driver_specific_parsers_description' => 'Добавлены дочерние классы <code>Pdo\Dblib</code>, <code>Pdo\Firebird</code>, <code>Pdo\MySql</code>, <code>Pdo\Odbc</code>, <code>Pdo\Sqlite</code> драйверов, наследующие <code>PDO</code>.', + 'new_without_parentheses_title' => '<code>new MyClass()->method()</code> без скобок', + 'new_without_parentheses_description' => 'К свойствам и методам только что инициализированного объекта теперь можно обращаться, не оборачивая выражение <code>new</code> в круглые скобки.', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_jit_implementation' => 'Новая реализация JIT на основе IR Framework', + 'new_core_functions' => 'Добавлена функция <code>request_parse_body()</code>.', + 'new_bcmath_functions' => 'Добавлены функции <code>bcceil()</code>, <code>bcdivmod()</code>, <code>bcfloor()</code> и <code>bcround()</code>.', + 'new_round_modes' => 'Добавлено перечисление <code>RoundingMode</code> для функции <code>round()</code> с 4 режимами: <code>TowardsZero</code>, <code>AwayFromZero</code>, <code>NegativeInfinity</code> и <code>PositiveInfinity</code>.', + 'new_date_functions' => 'Добавлены методы <code>DateTime::createFromTimestamp()</code>, <code>DateTime::getMicrosecond()</code>, <code>DateTime::setMicrosecond()</code>, <code>DateTimeImmutable::createFromTimestamp()</code>, <code>DateTimeImmutable::getMicrosecond()</code> и <code>DateTimeImmutable::setMicrosecond()</code>.', + 'new_mb_functions' => 'Добавлены функции <code>mb_trim()</code>, <code>mb_ltrim()</code>, <code>mb_rtrim()</code>, <code>mb_ucfirst()</code> и <code>mb_lcfirst()</code>.', + 'new_pcntl_functions' => 'Добавлены функции <code>pcntl_getcpu()</code>, <code>pcntl_getcpuaffinity()</code>, <code>pcntl_getqos_class()</code>, <code>pcntl_setns()</code> и <code>pcntl_waitid()</code>.', + 'new_reflection_functions' => 'Добавлены методы <code>ReflectionClassConstant::isDeprecated()</code>, <code>ReflectionGenerator::isClosed()</code> и <code>ReflectionProperty::isDynamic()</code>.', + 'new_standard_functions' => 'Добавлены функции <code>http_get_last_response_headers()</code>, <code>http_clear_last_response_headers()</code>, <code>fpow()</code>.', + 'new_xml_functions' => 'Добавлены методы <code>XMLReader::fromStream()</code>, <code>XMLReader::fromUri()</code>, <code>XMLReader::fromString()</code>, <code>XMLWriter::toStream()</code>, <code>XMLWriter::toUri()</code> и <code>XMLWriter::toMemory()</code>.', + 'new_grapheme_function' => 'Добавлена функция <code>grapheme_str_split()</code>.', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_pecl' => 'Модули IMAP, OCI8, PDO_OCI и pspell перенесены из ядра в PECL.', + 'bc_nullable_parameter_types' => 'Типы параметров, неявно допускающие значение <code>null</code> объявлены устаревшими.', + 'bc_classname' => 'Использование <code>_</code> в качестве имени класса объявлено устаревшим.', + 'bc_zero_raised_to_negative_number' => 'Возведение нуля в степень отрицательного числа объявлено устаревшим.', + 'bc_gmp' => 'Класс <code>GMP</code> теперь является окончательным.', + 'bc_round' => 'Передача некорректного режима в функцию <code>round()</code> выбрасывает ошибку <code>ValueError</code>.', + 'bc_typed_constants' => 'Константы классов модулей <code>date</code>, <code>intl</code>, <code>pdo</code>, <code>reflection</code>, <code>spl</code>, <code>sqlite</code> и <code>xmlreader</code> типизированы.', + 'bc_mysqli_constants' => 'Удалены константы <code>MYSQLI_SET_CHARSET_DIR</code>, <code>MYSQLI_STMT_ATTR_PREFETCH_ROWS</code>, <code>MYSQLI_CURSOR_TYPE_FOR_UPDATE</code>, <code>MYSQLI_CURSOR_TYPE_SCROLLABLE</code> и <code>MYSQLI_TYPE_INTERVAL</code>.', + 'bc_mysqli_functions' => 'Функции <code>mysqli_ping()</code>, <code>mysqli_kill()</code>, <code>mysqli_refresh()</code>, методы <code>mysqli::ping()</code>, <code>mysqli::kill()</code>, <code>mysqli::refresh()</code> и константы <code>MYSQLI_REFRESH_*</code> объявлены устаревшими.', + 'bc_standard' => 'Функции <code>stream_bucket_make_writeable()</code> и <code>stream_bucket_new()</code> теперь возвращают экземпляр класса <code>StreamBucket</code> вместо <code>stdClass</code>.', + 'bc_core' => '<a href="/manual/ru/migration84.incompatible.php#migration84.incompatible.core.exit">Изменение поведения языковой конструкции <code>exit()</code></a>.', + 'bc_warnings' => 'Константа <code>E_STRICT</code> объявлена устаревшей.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '<p>Для загрузки исходного кода PHP 8.3 посетите страницу <a href="/downloads">Downloads</a>. Бинарные файлы Windows находятся на сайте <a href="https://windows.php.net/download">PHP for Windows</a>. Список изменений перечислен на странице <a href="/ChangeLog-8.php#PHP_8_4">ChangeLog</a>.</p> + <p><a href="/manual/ru/migration84.php">Руководство по миграции</a> доступно в разделе документации. Ознакомьтесь с ним, чтобы узнать обо всех новых возможностях и изменениях, затрагивающих обратную совместимость.</p>', +]; 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 @@ +<?php + +$lang = 'nl'; +$documentation = 'en'; + +include_once __DIR__ . '/release.inc'; diff --git a/releases/8.4/pt_BR.php b/releases/8.4/pt_BR.php new file mode 100644 index 0000000000..be7e4f4750 --- /dev/null +++ b/releases/8.4/pt_BR.php @@ -0,0 +1,5 @@ +<?php + +$lang = 'pt_BR'; + +include_once __DIR__ . '/release.inc'; diff --git a/releases/8.4/release.inc b/releases/8.4/release.inc new file mode 100644 index 0000000000..4a0bb7308a --- /dev/null +++ b/releases/8.4/release.inc @@ -0,0 +1,533 @@ +<?php + +use function releases\php84\common_header;use function releases\php84\language_chooser;use function releases\php84\message; + +if (!isset($lang)) { + $lang = 'en'; +} +if (!isset($documentation)) { + $documentation = $lang; +} + +$_SERVER['BASE_PAGE'] = 'releases/8.4/' . $lang . '.php'; + +include_once __DIR__ . '/common.php'; + +common_header(message('common_header', $lang)); + +?> + <section class="php8-section php8-section_dark php8-section_header center"> + <div class="page-tools"> + <div class="change-language"> + <?php language_chooser($lang); ?> + </div> + </div> + <div class="php8-section__content"> + <div class="php8-logo"> + <img src="/images/php8/logo_php8_4.svg" alt="PHP 8.4" height="126" width="343"> + </div> + <div class="php8-title"><?= message('main_title', $lang) ?></div> + <div class="php8-subtitle"><?= message('main_subtitle', $lang) ?></div> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="/downloads"><?= message('upgrade_now', $lang) ?></a> + </div> + </div> + </section> + + <section class="php8-section center"> + <div class="php8-compare"> + <h2 class="php8-h2" id="property_hooks"> + <?= message('property_hooks_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/property-hooks">RFC</a> + <a class="php8-rfc" href="/manual/<?= $documentation ?>/migration84.new-features.php#migration84.new-features.core.property-hooks"><?= message('documentation', $lang) ?></a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class Locale +{ + private string $languageCode; + private string $countryCode; + + public function __construct(string $languageCode, string $countryCode) + { + $this->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 + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class Locale +{ + public string $languageCode; + + public string $countryCode + { + set (string $countryCode) { + $this->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 + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('property_hooks_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="asymmetric_visibility"> + <?= message('asymmetric_visibility_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/asymmetric-visibility-v2">RFC</a> + <a class="php8-rfc" href="/manual/<?= $documentation ?>/language.oop5.visibility.php#language.oop5.visibility-members-aviz"><?= message('documentation', $lang) ?></a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + public string $version = '8.3'; +} + +$phpVersion = new PhpVersion(); +var_dump($phpVersion->version); // string(3) "8.3" +$phpVersion->version = 'PHP 8.4'; // No error +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + public private(set) string $version = '8.4'; +} + +$phpVersion = new PhpVersion(); +var_dump($phpVersion->version); // string(3) "8.4" +$phpVersion->version = 'PHP 8.3'; // Visibility error +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('asymmetric_visibility_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="deprecated_attribute"> + <?= message('deprecated_attribute_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/deprecated_attribute">RFC</a> + <a class="php8-rfc" href="/manual/<?= $documentation ?>/class.deprecated.php"><?= message('documentation', $lang) ?></a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + /** + * @deprecated 8.3 use PhpVersion::getVersion() instead + */ + public function getPhpVersion(): string + { + return $this->getVersion(); + } + + public function getVersion(): string + { + return '8.3'; + } +} + +$phpVersion = new PhpVersion(); +// No indication that the method is deprecated. +echo $phpVersion->getPhpVersion(); +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + #[\Deprecated( + message: "use PhpVersion::getVersion() instead", + since: "8.4", + )] + public function getPhpVersion(): string + { + return $this->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 + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('deprecated_attribute_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="dom_additions_html5"> + <?= message('dom_additions_html5_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/dom_additions_84">RFC</a> + <a class="php8-rfc" href="https://wiki.php.net/rfc/domdocument_html5_parser">RFC</a> + <a class="php8-rfc" href="/manual/<?= $documentation ?>/migration84.new-features.php#migration84.new-features.dom"><?= message('documentation', $lang) ?></a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$dom = new DOMDocument(); +$dom->loadHTML( + <<<'HTML' + <main> + <article>PHP 8.4 is a feature-rich release!</article> + <article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article> + </main> + 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 + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$dom = Dom\HTMLDocument::createFromString( + <<<HTML + <main> + <article>PHP 8.4 is a feature-rich release!</article> + <article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article> + </main> + HTML, + LIBXML_NOERROR, +); + +$node = $dom->querySelector('main > article:last-child'); +var_dump($node->classList->contains("featured")); // bool(true) +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('dom_additions_html5_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="new_array_find"> + <?= message('new_array_find_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/array_find">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$animal = null; +foreach (['dog', 'cat', 'cow', 'duck', 'goose'] as $value) { + if (str_starts_with($value, 'c')) { + $animal = $value; + break; + } +} + +var_dump($animal); // string(3) "cat" +PHP + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$animal = array_find( + ['dog', 'cat', 'cow', 'duck', 'goose'], + static function (string $value): bool { + return str_starts_with($value, 'c'); + }, +); + +var_dump($animal); // string(3) "cat" +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('new_array_find_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="pdo_driver_specific_parsers"> + <?= message('pdo_driver_specific_parsers_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/pdo_driver_specific_parsers">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$connection = new PDO( + 'sqlite:foo.db', + $username, + $password, +); // object(PDO) + +$connection->sqliteCreateFunction( + 'prepend_php', + static fn ($string) => "PHP {$string}", +); + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$connection = PDO::connect( + 'sqlite:foo.db', + $username, + $password, +); // object(Pdo\Sqlite) + +$connection->createFunction( + 'prepend_php', + static fn ($string) => "PHP {$string}", +); // Does not exist on a mismatching driver. + +$connection->query('SELECT prepend_php(version) FROM php'); +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('pdo_driver_specific_parsers_description', $lang) ?> + </div> + </div> + <div class="php8-compare"> + <h2 class="php8-h2" id="new_without_parentheses"> + <?= message('new_without_parentheses_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/new_without_parentheses">RFC</a> + <a class="php8-rfc" href="/manual/<?= $documentation ?>/migration84.new-features.php#migration84.new-features.core.new-chaining"><?= message('documentation', $lang) ?></a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP < 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + public function getVersion(): string + { + return 'PHP 8.3'; + } +} + +var_dump((new PhpVersion())->getVersion()); +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.4</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + public function getVersion(): string + { + return 'PHP 8.4'; + } +} + +var_dump(new PhpVersion()->getVersion()); +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('new_without_parentheses_description', $lang) ?> + </div> + </div> + + </section> + + <section class="php8-section center php8-section_light php8-columns"> + <div class="php8-column"> + <h2 class="php8-h2" id="other_new_things"><?= message('new_classes_title', $lang) ?></h2> + <div class="php8-compare__content php8-compare__content--block"> + <ul> + <li><?= message('new_jit_implementation', $lang) ?></li> + <li><?= message('new_core_functions', $lang) ?></li> + <li><?= message('new_bcmath_functions', $lang) ?></li> + <li><?= message('new_round_modes', $lang) ?></li> + <li><?= message('new_date_functions', $lang) ?></li> + <li><?= message('new_mb_functions', $lang) ?></li> + <li><?= message('new_pcntl_functions', $lang) ?></li> + <li><?= message('new_reflection_functions', $lang) ?></li> + <li><?= message('new_standard_functions', $lang) ?></li> + <li><?= message('new_xml_functions', $lang) ?></li> + <li><?= message('new_grapheme_function', $lang) ?></li> + </ul> + </div> + </div> + + <div class="php8-column"> + <h2 class="php8-h2" id="deprecations_and_bc_breaks"><?= message('bc_title', $lang) ?></h2> + <div class="php8-compare__content"> + <ul> + <li><?= message('bc_pecl', $lang) ?></li> + <li><?= message('bc_nullable_parameter_types', $lang) ?></li> + <li><?= message('bc_classname', $lang) ?></li> + <li><?= message('bc_zero_raised_to_negative_number', $lang) ?></li> + <li><?= message('bc_round', $lang) ?></li> + <li><?= message('bc_typed_constants', $lang) ?></li> + <li><?= message('bc_gmp', $lang) ?></li> + <li><?= message('bc_mysqli_constants', $lang) ?></li> + <li><?= message('bc_mysqli_functions', $lang) ?></li> + <li><?= message('bc_standard', $lang) ?></li> + <li><?= message('bc_core', $lang) ?></li> + <li><?= message('bc_warnings', $lang) ?></li> + </ul> + </div> + </div> + </section> + + <section class="php8-section php8-section_dark php8-section_footer php8-footer"> + <div class="php8-section__content"> + <h2 class="php8-h2 center"><?= message('footer_title', $lang) ?></h2> + <div class="php8-button-wrapper center"> + <a class="php8-button php8-button_light" href="/downloads"><?= message('upgrade_now', $lang) ?></a> + </div> + <div class="php8-footer__content"><?= message('footer_description', $lang) ?></div> + </div> + </section> + +<?php + +site_footer(); diff --git a/releases/8.4/ru.php b/releases/8.4/ru.php new file mode 100644 index 0000000000..4aefaf9a8c --- /dev/null +++ b/releases/8.4/ru.php @@ -0,0 +1,5 @@ +<?php + +$lang = 'ru'; + +include_once __DIR__ . '/release.inc'; diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png index 5c0adf5b91..f70a89940d 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-archive-1998-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png index ac740916ac..ad673ed55e 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-conferences-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png index 694153ed96..43ba1b7978 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png index 17d7478f5a..c693f3c826 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png index ab87a9f7ed..272ff2b007 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-manual-php5-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png index 44d70c923a..9d1cdbc127 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-0-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png index 44b746c174..e981012ffd 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-1-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png index ad586e689f..9d20bcc7ad 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-2-index-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png index c1e6f9c7c8..7816a8f59f 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-6-php-chromium.png differ diff --git a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png index 7fa7427e84..e384ec21c2 100644 Binary files a/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png and b/tests/Visual/SmokeTest.spec.ts-snapshots/tests-screenshots-releases-8-3-index-php-chromium.png differ