[web-php] php-85-focus: wip

From: Date: Sat, 08 Nov 2025 18:23:13 +0000
Subject: [web-php] php-85-focus: wip
Groups: php.webmaster 
Request: Send a blank email to php-webmaster+get-33313@lists.php.net to get a copy of this message
Author: Sergey Panteleev (saundefined) Date: 2025-10-01T13:10:35+03:00 Commit: https://github.com/php/web-php/commit/ec7b3efb5188537d784dd173a20edc9beb562c8c Raw diff: https://github.com/php/web-php/commit/ec7b3efb5188537d784dd173a20edc9beb562c8c.diff wip Changed paths: M releases/8.5/languages/en.php M releases/8.5/release.inc Diff: diff --git a/releases/8.5/languages/en.php b/releases/8.5/languages/en.php index bb9fa77208..5d0dca4f36 100644 --- a/releases/8.5/languages/en.php +++ b/releases/8.5/languages/en.php @@ -11,9 +11,18 @@ 'url_parsing_api_title' => 'Add RFC 3986 and WHATWG URL compliant API', 'url_parsing_api_description' => '<code>Uri\UriException</code>, <code>Uri\InvalidUriException</code>, <code>Uri\UriComparisonMode</code>, <code>Uri\Rfc3986\Uri</code>, <code>Uri\WhatWg\InvalidUrlException</code>, <code>Uri\WhatWg\UrlValidationErrorType</code>, <code>Uri\WhatWg\UrlValidationError</code>, and <code>Uri\WhatWg\Url</code> are now available.', + 'clone_with_title' => 'Clone with v2', + 'no_discard_title' => 'New <code>#[\NoDiscard]</code> Attribute', + 'fcc_in_const_expr_title' => 'First Class Callables in constant expressions', + 'curl_share_persistence_improvement_title' => 'Persistent cURL share handle improvement', + 'array_first_last_title' => 'New <code>array_first()</code> and <code>array_last()</code> functions', + 'final_promotion_title' => 'Final Property Promotion', + 'attributes_on_constants_title' => 'Attributes on Constants', + 'override_properties_title' => 'Attribute <code>#[\Override]</code> extended to target properties', + 'static_aviz_title' => 'Asymmetric Visibility for Static Properties', + 'deprecated_traits_title' => 'Attribute <code>#[\Deprecated]</code> available for traits', 'new_classes_title' => 'New Classes, Interfaces, and Functions', - 'new_core_attributes' => '<code>#[\NoDiscard]</code> and <code>#[\DelayedTargetValidation]</code> attributes', 'bc_title' => 'Deprecations and backward compatibility breaks', diff --git a/releases/8.5/release.inc b/releases/8.5/release.inc index 4afcc2449a..94f0f9cedc 100644 --- a/releases/8.5/release.inc +++ b/releases/8.5/release.inc @@ -36,7 +36,76 @@ common_header(message('common_header', $lang)); <section class="php8-section center"> <div class="php8-compare"> - <h2 class="php8-h2" id="property_hooks"> + <h2 class="php8-h2" id="url_parsing_api"> + <?= message('url_parsing_api_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/url_parsing_api">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$components = parse_url("https://php.net/releases/8.5/en.php"); + +var_dump($components['host']); // string(7) "php.net" +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +$uri = new Uri\Rfc3986\Uri("https://php.net/releases/8.5/en.php"); + +var_dump($uri->getHost()); // string(7) "php.net" +PHP + ); ?> + </div> + </div> + </div> + <div class="php8-compare__content"> + <?= message('url_parsing_api_description', $lang) ?> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="clone_with"> + <?= message('clone_with_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/clone_with_v2">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="pipe_operator"> <?= message('pipe_operator_title', $lang) ?> <a class="php8-rfc" href="https://wiki.php.net/rfc/pipe-operator-v3">RFC</a> </h2> @@ -70,8 +139,8 @@ $input = ' Some kind of string. '; $output = $input |> trim(...) - |> fn (string $string) => str_replace(' ', '-', $string) - |> fn (string $string) => str_replace(['.', '/', '…'], '', $string) + |> (fn (string $string) => str_replace(' ', '-', $string)) + |> (fn (string $string) => str_replace(['.', '/', '…'], '', $string)) |> strtolower(...); PHP ); ?> @@ -81,9 +150,9 @@ PHP </div> <div class="php8-compare"> - <h2 class="php8-h2" id="property_hooks"> - <?= message('url_parsing_api_title', $lang) ?> - <a class="php8-rfc" href="https://wiki.php.net/rfc/url_parsing_api">RFC</a> + <h2 class="php8-h2" id="no_discard"> + <?= message('no_discard_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/marking_return_value_as_important">RFC</a> </h2> <div class="php8-compare__main"> <div class="php8-compare__block example-contents"> @@ -91,9 +160,38 @@ PHP <div class="php8-code phpcode"> <?php highlight_php_trimmed( <<<'PHP' -$components = parse_url("https://php.net/releases/8.5/en.php"); +// TODO +PHP -var_dump($components['host']); // string(7) "php.net" + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="fcc_in_const_expr"> + <?= message('fcc_in_const_expr_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/fcc_in_const_expr">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO PHP ); ?> @@ -105,16 +203,306 @@ PHP <div class="php8-code phpcode" style="display: table-cell;"> <?php highlight_php_trimmed( <<<'PHP' -$uri = new Uri\Rfc3986\Uri("https://php.net/releases/8.5/en.php"); +// TODO +PHP + ); ?> + </div> + </div> + </div> + </div> -var_dump($uri->getHost()); // string(7) "php.net" + <div class="php8-compare"> + <h2 class="php8-h2" id="curl_share_persistence_improvement"> + <?= message('curl_share_persistence_improvement_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/curl_share_persistence">RFC</a> + <a class="php8-rfc" href="https://wiki.php.net/rfc/curl_share_persistence_improvement">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO PHP ); ?> </div> </div> </div> <div class="php8-compare__content"> - <?= message('url_parsing_api_description', $lang) ?> + New <code>CurlSharePersistentHandle</code> class, <code>curl_multi_get_handles()</code>, <code>curl_share_init_persistent()</code> functions are available. + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="array_first_last"> + <?= message('array_first_last_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/array_first_last">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +$versions = ['PHP 8.1', 'PHP 8.2', 'PHP 8.3', 'PHP 8.4', 'PHP 8.5']; + +var_dump($versions[array_key_first($versions)]); // string(7) "PHP 8.1" +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +$versions = ['PHP 8.1', 'PHP 8.2', 'PHP 8.3', 'PHP 8.4', 'PHP 8.5']; + +var_dump(array_first($versions)); // string(7) "PHP 8.1" +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="final_promotion"> + <?= message('final_promotion_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/final_promotion">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion { + public function __construct( + final public string $version = 'PHP 8.4' + ) { + + } +} + +var_dump(new PhpVersion()->version); // Fatal error: Cannot use the final modifier on a parameter +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion { + public function __construct( + final public string $version = 'PHP 8.5' + ) { + + } +} + +var_dump(new PhpVersion()->version); // string(7) "PHP 8.5" +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="attributes_on_constants"> + <?= message('attributes_on_constants_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes-on-constants">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +<?php + +#[NewFeatures] +const VERSION = '8.4'; + +var_dump(VERSION); // Parse error: syntax error, unexpected token "const" +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +<?php + +#[NewFeatures] +const VERSION = '8.5'; + +var_dump(VERSION); // string(3) "8.5" +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="override_properties"> + <?= message('override_properties_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/override_properties">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +// TODO +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="static_aviz"> + <?= message('static_aviz_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/static-aviz">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + private static string $version = '8.4'; + + public function getVersion(): string + { + return self::$version; + } + + public function increment(): void + { + [$major, $minor] = explode('.', self::$version); + $minor++; + self::$version = "{$major}.{$minor}"; + } +} +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +class PhpVersion +{ + public static private(set) string $version = '8.5'; + + public function increment(): void + { + [$major, $minor] = explode('.', self::$version); + $minor++; + self::$version = "{$major}.{$minor}"; + } +} +PHP + ); ?> + </div> + </div> + </div> + </div> + + <div class="php8-compare"> + <h2 class="php8-h2" id="deprecated_traits"> + <?= message('deprecated_traits_title', $lang) ?> + <a class="php8-rfc" href="https://wiki.php.net/rfc/deprecated_traits">RFC</a> + </h2> + <div class="php8-compare__main"> + <div class="php8-compare__block example-contents"> + <div class="php8-compare__label">PHP &lt; 8.5</div> + <div class="php8-code phpcode"> + <?php highlight_php_trimmed( + <<<'PHP' +/** +* @deprecated 8.4 use UsePhpVersion instead +*/ +trait UseVersion +{ + public function getVersion(): string + { + return '8.4'; + } +} +PHP + + ); ?> + </div> + </div> + <div class="php8-compare__arrow"></div> + <div class="php8-compare__block example-contents" style="display: table;"> + <div class="php8-compare__label php8-compare__label_new">PHP 8.5</div> + <div class="php8-code phpcode" style="display: table-cell;"> + <?php highlight_php_trimmed( + <<<'PHP' +#[\Deprecated( + message: "use UsePhpVersion instead", + since: "8.5", +)] +trait UseVersion +{ + public function getVersion(): string + { + return '8.5'; + } +} +PHP + ); ?> + </div> + </div> </div> </div> </section> @@ -124,7 +512,13 @@ PHP <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>New <code>#[\DelayedTargetValidation]</code> attribute is available</li> + <li>New <code>get_error_handler()</code>, <code>get_exception_handler()</code> functions, and <code>Closure::getCurrent</code> method are available.</li> + <li>New <code>Dom\Element::getElementsByClassName()</code> and <code>Dom\Element::insertAdjacentHTML()</code> methods are available.</li> + <li>New <code>enchant_dict_remove_from_session()</code> and <code>enchant_dict_remove()</code> functions are available.</li> + <li>New <code>grapheme_levenshtein()</code> function is available.</li> + <li>New <code>opcache_is_script_cached_in_file_cache()</code> function is available.</li> + <li>New <code>ReflectionConstant::getFileName()</code>, <code>ReflectionConstant::getExtension()</code>, <code>ReflectionConstant::getExtensionName()</code>, <code>ReflectionConstant::getAttributes()</code>, and <code>ReflectionProperty::getMangledName()</code> methods are available.</li> </ul> </div> </div>

« previous php.webmaster (#33313) next »