Skip to content

[WIP] PHP 8.6 release page - #2030

Draft
saundefined wants to merge 4 commits into
php:masterfrom
saundefined:php86
Draft

saundefined wants to merge 4 commits into
php:masterfrom
saundefined:php86

Conversation

@saundefined

@saundefined saundefined commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

📊 Regression report for commit 9048311 is at https://web-php-regression-report-pr-2030.preview.thephp.foundation

@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Preview for commit 9048311 is available at https://web-php-pr-2030.preview.thephp.foundation

Comment thread public/releases/8.6/release.inc Outdated
Comment thread public/releases/8.6/release.inc Outdated
Comment thread public/releases/8.6/release.inc Outdated
Comment thread public/releases/8.6/release.inc
Comment thread public/releases/8.6/release.inc
Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
Comment on lines +160 to +162
/**
* Returns up to $limit items matching the $query.
*/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/**
* Returns up to $limit items matching the $query.
*/
/**
* Returns up to $limit items matching the $query.
*/

/** Terms to search */
string $query,
/** int Terms to search */

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/** int Terms to search */
/** Maximum number of results */

],
before: '',
after: <<<'PHP'
class NewsEntry {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class NewsEntry {
class NewsEntry
{

],
before: '',
after: <<<'PHP'
class DB {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class DB {
class DB
{

Comment on lines +134 to +147
class QueryBuilder {
private SortDirection $sort;
public function setSort(SortDirection $sort): void {
$this->sort = $sort;
}
private function getSortKeyword(): string {
return match($this->sort) {
SortDirection::Ascending => 'ASC',
SortDirection::Descending => 'DESC',
};
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class QueryBuilder {
private SortDirection $sort;
public function setSort(SortDirection $sort): void {
$this->sort = $sort;
}
private function getSortKeyword(): string {
return match($this->sort) {
SortDirection::Ascending => 'ASC',
SortDirection::Descending => 'DESC',
};
}
}
class QueryBuilder
{
private SortDirection $sort;
public function setSort(SortDirection $sort): void
{
$this->sort = $sort;
}
private function getSortKeyword(): string
{
return match($this->sort) {
SortDirection::Ascending => 'ASC',
SortDirection::Descending => 'DESC',
};
}
}

Comment on lines +118 to +131
class QueryBuilder {
private int $sort;
public function setSort(int $sort): void {
$this->sort = $sort;
}
private function getSortKeyword(): string {
return match($this->sort) {
SORT_ASC => 'ASC',
SORT_DESC => 'DESC',
};
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class QueryBuilder {
private int $sort;
public function setSort(int $sort): void {
$this->sort = $sort;
}
private function getSortKeyword(): string {
return match($this->sort) {
SORT_ASC => 'ASC',
SORT_DESC => 'DESC',
};
}
}
class QueryBuilder
{
private int $sort;
public function setSort(int $sort): void
{
$this->sort = $sort;
}
private function getSortKeyword(): string
{
return match($this->sort) {
SORT_ASC => 'ASC',
SORT_DESC => 'DESC',
};
}
}

Comment on lines +54 to +67
new FeatureComparison(
id: 'duration-class',
title: message('duration_title', $lang),
description: message('duration_description', $lang),
links: [
'RFC|https://wiki.php.net/rfc/duration_class',
],
before: <<<'PHP'
// TODO
PHP,
after: <<<'PHP'
// TODO
PHP,
),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For Duration perhaps a custom wrapper around time_nanosleep()? The class nicely maps directly onto the parameters of time_nanosleep().

And then perhaps showcase some of the mathematical operations, e.g. the delay example from the RFC: https://wiki.php.net/rfc/duration_class#examples

<?php

return [
'common_header' => 'PHP 8.6 is a major update of the PHP language, with new features including the Partial Function Application, new Duration class, Polling API, and new clamp() function',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'common_header' => 'PHP 8.6 is a major update of the PHP language, with new features including the Partial Function Application, new Duration class, Polling API, and new clamp() function',
'common_header' => 'PHP 8.6 is a major update of the PHP language, with new features including Partial Function Application, a new Duration class, a Polling API, and a new clamp() function',

("a" can also be "the", both here and in the main_subtitle message)

return [
'common_header' => 'PHP 8.6 is a major update of the PHP language, with new features including the Partial Function Application, new Duration class, Polling API, and new clamp() function',
'main_title' => 'Smarter, Faster, Built for Tomorrow.',
'main_subtitle' => '<p xmlns="http://www.w3.org/1999/html"><strong>PHP 8.6 is a major update of the PHP language</strong>, with new features including the <strong>Partial Function Application</strong>, new <strong>Duration</strong> class, <strong>Polling API</strong>, and new <strong>clamp()</strong> function</p>',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'main_subtitle' => '<p xmlns="http://www.w3.org/1999/html"><strong>PHP 8.6 is a major update of the PHP language</strong>, with new features including the <strong>Partial Function Application</strong>, new <strong>Duration</strong> class, <strong>Polling API</strong>, and new <strong>clamp()</strong> function</p>',
'main_subtitle' => '<p xmlns="http://www.w3.org/1999/html"><strong>PHP 8.6 is a major update of the PHP language</strong>, with new features including <strong>Partial Function Application</strong>, a new <strong>Duration</strong> class, a <strong>Polling API</strong>, and a new <strong>clamp()</strong> function</p>',

'documentation' => 'Doc',
'released' => 'Released Nov 19, 2026',
'key_features' => 'Key Features in PHP 8.6',
'key_features_description' => '<p><strong>Faster</strong>, <strong>cleaner</strong>, and <strong>built for developers</strong>.</p>',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we avoid putting the <p> tags in the message contents, if the entire message is a single paragraph? Just wrap the actual usage in the tags, to make translating easier

'key_features' => 'Key Features in PHP 8.6',
'key_features_description' => '<p><strong>Faster</strong>, <strong>cleaner</strong>, and <strong>built for developers</strong>.</p>',

'features_pfa_description' => '<p>Allows functions to be called with only a subset of the required parameters, deferring the passing of the remaining ones to a later time.</p>',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this description is wrong - functions are not called with a subset of the required parameters, rather a subset of parameters is specified and the call is delayed until the remaining ones are provided

'features_sort_direction_description' => '<p>Represents a sort directions.</p>',

'pfa_title' => 'Partial Function Application',
'pfa_description' => 'Allows functions to be called with only a subset of the required parameters, deferring the passing of the remaining ones to a later time.',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any expected difference between this and features_pfa_description? Same with some of the other description messages - if they are expected to be the same, just reuse the original one?

Not repeating my comments on the various features_* and other messages

'features_polling_api_description' => '<p>The new API is available at the user-code level, allowing low-level frameworks such as ReactPHP or Amp to utilize it.</p>',
'features_clamp_description' => '<p>Ensures that a given value (numeric or otherwise) falls within a specified range.</p>',
'features_duration_description' => '<p>Represents a duration of time.</p>',
'features_sort_direction_description' => '<p>Represents a sort directions.</p>',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'features_sort_direction_description' => '<p>Represents a sort directions.</p>',
'features_sort_direction_description' => '<p>Represents possible sort directions.</p>',

'stream_error_handling_description' => 'TODO.',
'doc_comments_title' => 'DocComments For Function Parameters',
'doc_comments_description' => 'TODO.',
'isreadable_iswriteable_title' => 'New <code>ReflectionProperty::isReadable</code> and <code>ReflectionProperty::isWritable</code> methods',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'isreadable_iswriteable_title' => 'New <code>ReflectionProperty::isReadable</code> and <code>ReflectionProperty::isWritable</code> methods',
'isreadable_iswriteable_title' => 'New <code>ReflectionProperty::isReadable()</code> and <code>ReflectionProperty::isWritable()</code> methods',

}

\site_header("PHP 8.6 Release Announcement", [
'current' => 'php85',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are these meant to say 8.5 for current and for the css ?

@TimWolla TimWolla left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rendering on mobile is broken:

Image

For PHP 8.5:

Image

common_header(message('common_header', $lang));

$comparisons = [
new FeatureComparison(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this array have 8-space indentation? The existing release pages use 4-space indentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants