From 133bc45a6e4c909a141efcaa750e5764de6a3e17 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Mon, 26 Jun 2023 12:14:50 +0300 Subject: [PATCH 01/35] PHP 8.3 release page --- include/header.inc | 4 +- index.php | 2 +- releases/8.3/common.php | 74 ++++++++++ releases/8.3/en.php | 5 + releases/8.3/index.php | 5 + releases/8.3/languages/en.php | 16 ++ releases/8.3/release.inc | 269 ++++++++++++++++++++++++++++++++++ 7 files changed, 372 insertions(+), 3 deletions(-) create mode 100644 releases/8.3/common.php create mode 100644 releases/8.3/en.php create mode 100644 releases/8.3/index.php create mode 100644 releases/8.3/languages/en.php create mode 100644 releases/8.3/release.inc diff --git a/include/header.inc b/include/header.inc index 2aff9d8a78..c6eed89ef2 100644 --- a/include/header.inc +++ b/include/header.inc @@ -105,8 +105,8 @@ if (!isset($config["languages"])) {
  • ">Get Involved
  • ">Help
  • "> - - php8.2 + + php8.3
  • diff --git a/index.php b/index.php index c935b22344..fc42650218 100644 --- a/index.php +++ b/index.php @@ -95,7 +95,7 @@

    A popular general-purpose scripting language that is especially suited to web development.
    Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

    - What's new in 8.2 + What's new in 8.3 Download
    EOF; diff --git a/releases/8.3/common.php b/releases/8.3/common.php new file mode 100644 index 0000000000..c76fc96f42 --- /dev/null +++ b/releases/8.3/common.php @@ -0,0 +1,74 @@ + 'php8', + 'css' => ['php8.css'], + 'meta_tags' => << + + + + + + + + + + + + +META + ]); +} + +function language_chooser(string $currentLang): void { + $LANGUAGES = [ + 'en' => 'English', + ]; + + // Print out the form with all the options + echo ' +
    +
    + + +
    +
    +'; +} + +function message($code, $language = 'en') +{ + $original = require __DIR__ . '/languages/en.php'; + if (($language !== 'en') && file_exists(__DIR__ . '/languages/' . $language . '.php')) { + $translation = require __DIR__ . '/languages/' . $language . '.php'; + } + + return $translation[$code] ?? $original[$code] ?? $code; +} diff --git a/releases/8.3/en.php b/releases/8.3/en.php new file mode 100644 index 0000000000..aa9133cd7a --- /dev/null +++ b/releases/8.3/en.php @@ -0,0 +1,5 @@ + 'PHP 8.3 is a major update of the PHP language. Readonly amendments, Typed class constants, #[Override] attribute, Randomizer additions, performance improvements and more', + 'documentation' => 'Doc', + 'main_title' => 'Released!', + 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', + 'upgrade_now' => 'Upgrade to PHP 8.3 now!', + + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'bc_title' => 'Deprecations and backward compatibility breaks', + + 'footer_title' => 'Better performance, better syntax, improved type safety.', + 'footer_description' => '

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

    +

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

    ', +]; diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc new file mode 100644 index 0000000000..d61bf44b9d --- /dev/null +++ b/releases/8.3/release.inc @@ -0,0 +1,269 @@ + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +

    + Readonly amendments + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    + +
    +

    + Typed class constants + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    + +
    +

    + #[Override] attribute + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    + +
    +

    + Randomizer additions + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    + +
    +

    + Dynamic class constant fetch + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    + +
    +

    + Improved unserialize() error handling + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    +
    + +
    +
    +

    +
    +
      +
    • New json_validate function
    • +
    • New mb_str_pad function
    • +
    • New posix_sysconf, posix_pathconf, posix_fpathconf, and posix_eaccess functions
    • +
    • New Randomizer::getBytesFromString, Randomizer::nextFloat, and Randomizer::getFloat functions, also Randomizer::IntervalBoundary enum.
    • +
    • New socket_atmark function.
    • +
    +
    +
    + +
    +

    +
    +
      +
    • More Appropriate Date/Time Exceptions
    • +
    • Negative indices in arrays
    • +
    • Changes to the range function
    • +
    • Traits and static properties
    • +
    • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS
    • +
    • Changed mt_srand and srand functions
    • +
    • ReflectionClass::getStaticProperties is no longer nullable
    • +
    +
    +
    +
    + + + + Date: Tue, 26 Sep 2023 20:00:18 +0300 Subject: [PATCH 02/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/release.inc | 112 ++++++++++++++++++++++++++++++--------- 1 file changed, 86 insertions(+), 26 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index d61bf44b9d..976ae3c9ab 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -69,7 +69,7 @@ PHP
    -

    +

    Typed class constants RFC

    @@ -100,7 +100,7 @@ PHP
    -

    +

    #[Override] attribute RFC

    @@ -131,9 +131,9 @@ PHP
    -

    - Randomizer additions - RFC +

    + New Randomizer::getBytesFromString method + RFC

    @@ -141,7 +141,25 @@ PHP
    @@ -153,7 +171,15 @@ PHP
    getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16), +); + +echo $randomDomain; PHP ); ?>
    @@ -162,9 +188,9 @@ PHP
    -

    - Dynamic class constant fetch - RFC +

    + New Randomizer::getFloat and Randomizer::nextFloat methods + RFC

    @@ -172,7 +198,20 @@ PHP
    @@ -184,7 +223,14 @@ PHP
    getFloat(-89.2, 56.7, \Random\IntervalBoundary::ClosedClosed); + +$chanceForTrue = 0.1; +// Randomizer::nextFloat() is equivalent to Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen). +// The upper bound, i.e. 1, will not be returned. +$myBoolean = $randomizer->nextFloat(); < $chanceForTrue; PHP ); ?>
    @@ -192,10 +238,17 @@ PHP
    +
    + The algorithm used is the γ-section algorithm as published in: + Drawing Random + Floating-Point Numbers from an Interval. + Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022. +
    +
    -

    - Improved unserialize() error handling - RFC +

    + Dynamic class constant fetch + RFC

    @@ -229,11 +282,18 @@ PHP

      -
    • New json_validate function
    • -
    • New mb_str_pad function
    • -
    • New posix_sysconf, posix_pathconf, posix_fpathconf, and posix_eaccess functions
    • -
    • New Randomizer::getBytesFromString, Randomizer::nextFloat, and Randomizer::getFloat functions, also Randomizer::IntervalBoundary enum.
    • +
    • New json_validate function.
    • +
    • New ldap_connect_wallet, and ldap_exop_sync functions.
    • +
    • New mb_str_pad function.
    • +
    • New posix_sysconf, posix_pathconf, posix_fpathconf, and + posix_eaccess functions. +
    • +
    • New ReflectionMethod::createFromMethodName method.
    • New socket_atmark function.
    • +
    • New str_increment, str_decrement, and + stream_context_set_options functions. +
    • +
    • New ZipArchive::getArchiveFlag function.
    @@ -242,13 +302,13 @@ PHP

      -
    • More Appropriate Date/Time Exceptions
    • -
    • Negative indices in arrays
    • -
    • Changes to the range function
    • -
    • Traits and static properties
    • -
    • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS
    • -
    • Changed mt_srand and srand functions
    • -
    • ReflectionClass::getStaticProperties is no longer nullable
    • +
    • More Appropriate Date/Time Exceptions.
    • +
    • Negative indices in arrays.
    • +
    • Changes to the range function.
    • +
    • Traits and static properties.
    • +
    • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.
    • +
    • The MT_RAND_PHP Mt19937 variant is deprecated.
    • +
    • ReflectionClass::getStaticProperties is no longer nullable.
    From 3846a5361a525ce0a3defa8380afc661f7e88c3a Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 20:12:16 +0300 Subject: [PATCH 03/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/release.inc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 976ae3c9ab..7b68076ab0 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -156,7 +156,10 @@ function getBytesFromString(string $string, int $length) { $randomDomain = sprintf( "%s.example.com", - getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16), + getBytesFromString( + 'abcdefghijklmnopqrstuvwxyz0123456789', + 16, + ), ); echo $randomDomain; @@ -171,12 +174,16 @@ PHP
    getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16), + $randomizer->getBytesFromString( + 'abcdefghijklmnopqrstuvwxyz0123456789', + 16, + ), ); echo $randomDomain; @@ -203,7 +210,8 @@ function getFloat(float $min, float $max) { // This algorithm is biased for specific inputs and may // return values outside the given range. This is impossible // to work around in userland. - return (random_int(0, PHP_INT_MAX) / PHP_INT_MAX) * ($max - $min) + $min; + $offset = random_int(0, PHP_INT_MAX) / PHP_INT_MAX; + return $offset * ($max - $min) + $min; } $temperature = getFloat(-89.2, 56.7); @@ -225,10 +233,15 @@ PHP <<<'PHP' $randomizer = new \Random\Randomizer(); -$temperature = $randomizer->getFloat(-89.2, 56.7, \Random\IntervalBoundary::ClosedClosed); +$temperature = $randomizer->getFloat( + -89.2, + 56.7, + \Random\IntervalBoundary::ClosedClosed, +); $chanceForTrue = 0.1; -// Randomizer::nextFloat() is equivalent to Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen). +// Randomizer::nextFloat() is equivalent to +// Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen). // The upper bound, i.e. 1, will not be returned. $myBoolean = $randomizer->nextFloat(); < $chanceForTrue; PHP From ebb6bf335a4b9681046c519260d754cd499c1dd4 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 20:27:16 +0300 Subject: [PATCH 04/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/release.inc | 45 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 7b68076ab0..21fbcfcc99 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -101,7 +101,7 @@ PHP

    - #[Override] attribute + #[\Override] attribute RFC

    @@ -110,7 +110,26 @@ PHP
    logFile = fopen('/tmp/logfile', 'w'); + } + + protected function taerDown(): void + { + fclose($this->logFile); + unlink('/tmp/logfile'); + } +} + +// The log file will never be removed, because the +// method name was mistyped (taerDown vs tearDown). PHP ); ?> @@ -123,7 +142,27 @@ PHP logFile = fopen('/tmp/logfile', 'w'); + } + + #[\Override] + protected function taerDown(): void + { + fclose($this->logFile); + unlink('/tmp/logfile'); + } +} + +// Fatal error: MyTest::taerDown() has #[\Override] attribute, +// but no matching parent method exists ); ?>
    From 199f58eda92a362a9c360fe8e0a2d03220c59349 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 20:29:06 +0300 Subject: [PATCH 05/35] Fix markup --- releases/8.3/release.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 21fbcfcc99..6f87d7d6e5 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -111,7 +111,7 @@ PHP
    From 7adbc2982c4581b49bd21b25a35302c3122f4508 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 20:41:56 +0300 Subject: [PATCH 06/35] Add Typed class constants examples --- releases/8.3/release.inc | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 6f87d7d6e5..1b919aaccc 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -79,7 +79,14 @@ PHP
    @@ -91,7 +98,15 @@ PHP
    @@ -141,7 +156,6 @@ PHP
    Negative indices in arrays.
  • Changes to the range function.
  • Traits and static properties.
  • -
  • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.
  • +
  • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS. +
  • The MT_RAND_PHP Mt19937 variant is deprecated.
  • ReflectionClass::getStaticProperties is no longer nullable.
  • From 60f27dee62f2f13cff02ff909928f69370bc6b03 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 23:00:42 +0300 Subject: [PATCH 07/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/release.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 1b919aaccc..20b9beb9b3 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -186,7 +186,7 @@ PHP

    - New Randomizer::getBytesFromString method + New Randomizer::getBytesFromString() method RFC

    @@ -250,7 +250,7 @@ PHP

    - New Randomizer::getFloat and Randomizer::nextFloat methods + New Randomizer::getFloat() and Randomizer::nextFloat() methods RFC

    @@ -297,7 +297,7 @@ $chanceForTrue = 0.1; // Randomizer::nextFloat() is equivalent to // Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen). // The upper bound, i.e. 1, will not be returned. -$myBoolean = $randomizer->nextFloat(); < $chanceForTrue; +$myBoolean = $randomizer->nextFloat() < $chanceForTrue; PHP ); ?>
    From fa2b310fceb501351d42fde54c4c0feeb8e82fbd Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 23:12:08 +0300 Subject: [PATCH 08/35] Add Dynamic class constant fetch examples --- releases/8.3/release.inc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 20b9beb9b3..9dfc1af3a7 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -323,7 +323,15 @@ PHP
    getConstant($searchableConstant)); PHP ); ?> @@ -335,7 +343,13 @@ PHP
    From e46db4251f9658f4f85126c29e55c27f5a38887c Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 23:17:10 +0300 Subject: [PATCH 09/35] Use `()` for functions --- releases/8.3/release.inc | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 9dfc1af3a7..2658598cd2 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -363,18 +363,19 @@ PHP

      -
    • New json_validate function.
    • -
    • New ldap_connect_wallet, and ldap_exop_sync functions.
    • -
    • New mb_str_pad function.
    • -
    • New posix_sysconf, posix_pathconf, posix_fpathconf, and - posix_eaccess functions. +
    • New json_validate() function.
    • +
    • New ldap_connect_wallet(), and ldap_exop_sync() functions.
    • +
    • New mb_str_pad() function.
    • +
    • New posix_sysconf(), posix_pathconf(), posix_fpathconf(), + and + posix_eaccess() functions.
    • -
    • New ReflectionMethod::createFromMethodName method.
    • -
    • New socket_atmark function.
    • -
    • New str_increment, str_decrement, and - stream_context_set_options functions. +
    • New ReflectionMethod::createFromMethodName() method.
    • +
    • New socket_atmark() function.
    • +
    • New str_increment(), str_decrement(), and + stream_context_set_options() functions.
    • -
    • New ZipArchive::getArchiveFlag function.
    • +
    • New ZipArchive::getArchiveFlag() function.
    @@ -385,12 +386,12 @@ PHP
    • More Appropriate Date/Time Exceptions.
    • Negative indices in arrays.
    • -
    • Changes to the range function.
    • +
    • Changes to the range() function.
    • Traits and static properties.
    • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.
    • The MT_RAND_PHP Mt19937 variant is deprecated.
    • -
    • ReflectionClass::getStaticProperties is no longer nullable.
    • +
    • ReflectionClass::getStaticProperties() is no longer nullable.
    From 04806ba3d032ea3695579cba42ee4efa7800d26e Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 26 Sep 2023 23:51:13 +0300 Subject: [PATCH 10/35] Add Readonly amendments examples --- releases/8.3/release.inc | 56 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 2658598cd2..973ff30e08 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -48,7 +48,43 @@ common_header(message('common_header', $lang));
    dateTime = $dateTime; + } + + public function with(...$values): static + { + $reflectedClass = new ReflectionClass(static::class); + $clone = $reflectedClass->newInstanceWithoutConstructor(); + + foreach (get_object_vars($this) as $field => $value) { + $value = array_key_exists($field, $values) ? + $values[$field] : $value; + + $scope = $reflectedClass + ->getProperty($field) + ->getDeclaringClass() + ->getName(); + + if ($scope === self::class) { + $clone->$field = $value; + } else { + (fn () => $this->$field = $value) + ->bindTo($clone, $scope)(); + } + } + + return $clone; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = $today->with( + dateTime: (new \DateTime())->modify('+1 day') +); PHP ); ?> @@ -60,7 +96,23 @@ PHP
    dateTime = $dateTime; + } + + public function __clone() + { + $this->dateTime = clone $this->dateTime; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = clone $today; + +$tomorrow->dateTime->modify('+1 day'); PHP ); ?>
    From 91b09fa608b85aabca64a4487734507570ccf2c7 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Wed, 4 Oct 2023 14:15:00 +0300 Subject: [PATCH 11/35] Use lang file --- releases/8.3/languages/en.php | 27 ++++++++++++++++++ releases/8.3/release.inc | 53 +++++++++++++++-------------------- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index a5e36257ec..de7eeab1e1 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -7,8 +7,35 @@ 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', 'upgrade_now' => 'Upgrade to PHP 8.3 now!', + 'readonly_title' => 'Readonly amendments', + 'typed_class_constants_title' => 'Typed class constants', + 'override_title' => '#[\Override] attribute', + 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', + 'randomizer_getfloat_nextfloat_title' => 'New Randomizer::getFloat() and Randomizer::nextFloat() methods', + 'randomizer_getfloat_nextfloat_description' => 'The algorithm used is the γ-section algorithm as published in: + Drawing Random + Floating-Point Numbers from an Interval. + Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.', + 'dynamic_class_constant_fetch_title' => 'Dynamic class constant fetch', + 'new_classes_title' => 'New Classes, Interfaces, and Functions', + 'new_json_validate' => 'New json_validate() function.', + 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', + 'new_mb_str_pad' => 'New mb_str_pad() function.', + 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', + 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', + 'new_socket' => 'New socket_atmark() function.', + 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', + 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', + 'bc_title' => 'Deprecations and backward compatibility breaks', + 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', + 'bc_arrays' => 'Negative indices in arrays.', + 'bc_range' => 'Changes to the range() function.', + 'bc_traits' => 'Traits and static properties.', + 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', 'footer_title' => 'Better performance, better syntax, improved type safety.', 'footer_description' => '

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

    diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 973ff30e08..6743380ffe 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -39,7 +39,7 @@ common_header(message('common_header', $lang));

    - Readonly amendments + RFC

    @@ -122,7 +122,7 @@ PHP

    - Typed class constants + RFC

    @@ -168,7 +168,7 @@ PHP

    - #[\Override] attribute + RFC

    @@ -238,7 +238,7 @@ PHP

    - New Randomizer::getBytesFromString() method + RFC

    @@ -302,7 +302,7 @@ PHP

    - New Randomizer::getFloat() and Randomizer::nextFloat() methods + RFC

    @@ -358,15 +358,12 @@ PHP
    - The algorithm used is the γ-section algorithm as published in: - Drawing Random - Floating-Point Numbers from an Interval. - Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022. +

    - Dynamic class constant fetch + RFC

    @@ -415,19 +412,14 @@ PHP

      -
    • New json_validate() function.
    • -
    • New ldap_connect_wallet(), and ldap_exop_sync() functions.
    • -
    • New mb_str_pad() function.
    • -
    • New posix_sysconf(), posix_pathconf(), posix_fpathconf(), - and - posix_eaccess() functions. -
    • -
    • New ReflectionMethod::createFromMethodName() method.
    • -
    • New socket_atmark() function.
    • -
    • New str_increment(), str_decrement(), and - stream_context_set_options() functions. -
    • -
    • New ZipArchive::getArchiveFlag() function.
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    @@ -436,14 +428,13 @@ PHP

      -
    • More Appropriate Date/Time Exceptions.
    • -
    • Negative indices in arrays.
    • -
    • Changes to the range() function.
    • -
    • Traits and static properties.
    • -
    • The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS. -
    • -
    • The MT_RAND_PHP Mt19937 variant is deprecated.
    • -
    • ReflectionClass::getStaticProperties() is no longer nullable.
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    From f278e6f2b7a310a03a27cda857cd1bcf68689e18 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Sat, 14 Oct 2023 16:29:15 +0300 Subject: [PATCH 12/35] Update releases/8.3/release.inc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/release.inc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 6743380ffe..bde37c6139 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -378,9 +378,7 @@ class Foo { $searchableConstant = 'PHP'; -$reflectedClass = new ReflectionClass(Foo::class); - -var_dump($reflectedClass->getConstant($searchableConstant)); +var_dump(constant(Foo::class . "::{$searchableConstant}")); PHP ); ?> From 7704c11171a8b3089e2e2de3f07dee30679f3d0a Mon Sep 17 00:00:00 2001 From: Roman Pronskiy Date: Tue, 31 Oct 2023 02:52:40 +0200 Subject: [PATCH 13/35] Add PHP 8.3 logo --- images/php8/logo_php8_3.svg | 9 +++++++++ include/header.inc | 2 +- releases/8.3/release.inc | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 images/php8/logo_php8_3.svg diff --git a/images/php8/logo_php8_3.svg b/images/php8/logo_php8_3.svg new file mode 100644 index 0000000000..ae9af2100d --- /dev/null +++ b/images/php8/logo_php8_3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/include/header.inc b/include/header.inc index c6eed89ef2..0ad3050053 100644 --- a/include/header.inc +++ b/include/header.inc @@ -106,7 +106,7 @@ if (!isset($config["languages"])) {
  • ">Help
  • "> - php8.3 + php8.3
  • diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index bde37c6139..6cd0e1a94e 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -26,7 +26,7 @@ common_header(message('common_header', $lang));
    From 2d6097c12fc8621f7cf5aba12430a6ea2c50b055 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Thu, 5 Oct 2023 16:44:44 +0300 Subject: [PATCH 14/35] Randomizer doc links --- releases/8.3/release.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 6cd0e1a94e..d40d60ccd6 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -240,6 +240,7 @@ PHP

    RFC +

    @@ -304,6 +305,7 @@ PHP

    RFC +

    From ab5013bda032eae63b5c667e68dfa02072852d84 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Thu, 2 Nov 2023 18:54:09 +0300 Subject: [PATCH 15/35] Released image --- images/php8/php_8_3_released.png | Bin 0 -> 30847 bytes releases/8.3/common.php | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 images/php8/php_8_3_released.png diff --git a/images/php8/php_8_3_released.png b/images/php8/php_8_3_released.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e4fd786cef1d4d31d6f4502b26d3a7a67a6ea5 GIT binary patch literal 30847 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 Date: Thu, 2 Nov 2023 18:56:23 +0300 Subject: [PATCH 16/35] fix: cs --- releases/8.3/release.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index d40d60ccd6..9341fe6ff9 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -240,7 +240,7 @@ PHP

    RFC - +

    @@ -305,7 +305,7 @@ PHP

    RFC - +

    From 4cba2b424f00e830de09f0c22c3573c5278b09a8 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Thu, 2 Nov 2023 19:01:16 +0300 Subject: [PATCH 17/35] Move readonly amendments down --- releases/8.3/release.inc | 148 +++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 84 deletions(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 9341fe6ff9..ab193c0c3f 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -37,89 +37,6 @@ common_header(message('common_header', $lang));
    -
    -

    - - RFC -

    -
    -
    -
    PHP < 8.3
    -
    - dateTime = $dateTime; - } - - public function with(...$values): static - { - $reflectedClass = new ReflectionClass(static::class); - $clone = $reflectedClass->newInstanceWithoutConstructor(); - - foreach (get_object_vars($this) as $field => $value) { - $value = array_key_exists($field, $values) ? - $values[$field] : $value; - - $scope = $reflectedClass - ->getProperty($field) - ->getDeclaringClass() - ->getName(); - - if ($scope === self::class) { - $clone->$field = $value; - } else { - (fn () => $this->$field = $value) - ->bindTo($clone, $scope)(); - } - } - - return $clone; - } -} - -$today = new Foo(new \DateTime()); -$tomorrow = $today->with( - dateTime: (new \DateTime())->modify('+1 day') -); -PHP - - ); ?> -
    -
    -
    -
    -
    PHP 8.3
    -
    - dateTime = $dateTime; - } - - public function __clone() - { - $this->dateTime = clone $this->dateTime; - } -} - -$today = new Foo(new \DateTime()); -$tomorrow = clone $today; - -$tomorrow->dateTime->modify('+1 day'); -PHP - ); ?> -
    -
    -
    -
    -

    @@ -375,7 +292,7 @@ PHP +

    +
    +
    +
    + +
    +

    + + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + dateTime = $dateTime; + } + + public function __clone() + { + $this->dateTime = clone $this->dateTime; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = clone $today; + +// Fatal error: Cannot modify readonly property Foo::$dateTime +PHP + + ); ?> +
    +
    +
    +
    +
    PHP 8.3
    +
    + dateTime = $dateTime; + } + + public function __clone() + { + $this->dateTime = clone $this->dateTime; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = clone $today; + +$tomorrow->dateTime->modify('+1 day'); PHP ); ?>
    From b7e0cdf9f677b560d7b6fa985212510942dcc420 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 3 Nov 2023 09:43:46 +0300 Subject: [PATCH 18/35] Apply suggestions from code review Co-authored-by: Jakub Zelenka --- releases/8.3/languages/en.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index de7eeab1e1..c2de6a748b 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -32,8 +32,8 @@ 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', 'bc_arrays' => 'Negative indices in arrays.', 'bc_range' => 'Changes to the range() function.', - 'bc_traits' => 'Traits and static properties.', - 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant had been deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_traits' => 'Changes in re-declaration of static properties in traits.', + 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', From 3d71ed3c6dbd5db20a853ba5a8757dbd70744a38 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 3 Nov 2023 10:01:13 +0300 Subject: [PATCH 19/35] Apply suggestions from code review --- releases/8.3/languages/en.php | 6 +- releases/8.3/release.inc | 249 ++++++++++++++++++++-------------- 2 files changed, 148 insertions(+), 107 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index c2de6a748b..8b99a7c512 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -8,6 +8,7 @@ 'upgrade_now' => 'Upgrade to PHP 8.3 now!', 'readonly_title' => 'Readonly amendments', + 'json_validate_title' => 'New json_validate() function', 'typed_class_constants_title' => 'Typed class constants', 'override_title' => '#[\Override] attribute', 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', @@ -19,7 +20,8 @@ 'dynamic_class_constant_fetch_title' => 'Dynamic class constant fetch', 'new_classes_title' => 'New Classes, Interfaces, and Functions', - 'new_json_validate' => 'New json_validate() function.', + 'new_dom' => 'New DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), and DOMParentNode::replaceChildren() methods.', + 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', 'new_mb_str_pad' => 'New mb_str_pad() function.', 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', @@ -30,7 +32,7 @@ 'bc_title' => 'Deprecations and backward compatibility breaks', 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', - 'bc_arrays' => 'Negative indices in arrays.', + 'bc_arrays' => 'Assigning a negative index n to an empty array will now make sure that the next index is n + 1 instead of 0.', 'bc_range' => 'Changes to the range() function.', 'bc_traits' => 'Changes in re-declaration of static properties in traits.', 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index ab193c0c3f..6b8c60093b 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -83,6 +83,49 @@ PHP
    +
    +

    + + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    +

    @@ -153,6 +196,105 @@ PHP

    +
    +

    + + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + dateTime = $dateTime; + } + + public function __clone() + { + $this->dateTime = clone $this->dateTime; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = clone $today; + +// Fatal error: Cannot modify readonly property Foo::$dateTime +PHP + + ); ?> +
    +
    +
    +
    +
    PHP 8.3
    +
    + dateTime = $dateTime; + } + + public function __clone() + { + $this->dateTime = clone $this->dateTime; + } +} + +$today = new Foo(new \DateTime()); +$tomorrow = clone $today; + +$tomorrow->dateTime->modify('+1 day'); +PHP + ); ?> +
    +
    +
    +
    + +
    +

    + + RFC +

    +
    +
    +
    PHP < 8.3
    +
    + +
    +
    +
    +
    +
    PHP 8.3
    +
    + +
    +
    +
    +
    +

    @@ -280,111 +422,7 @@ PHP

    -
    -

    - - RFC -

    -
    -
    -
    PHP < 8.3
    -
    - -
    -
    -
    -
    -
    PHP 8.3
    -
    - -
    -
    -
    -
    - -
    -

    - - RFC -

    -
    -
    -
    PHP < 8.3
    -
    - dateTime = $dateTime; - } - - public function __clone() - { - $this->dateTime = clone $this->dateTime; - } -} - -$today = new Foo(new \DateTime()); -$tomorrow = clone $today; - -// Fatal error: Cannot modify readonly property Foo::$dateTime -PHP - - ); ?> -
    -
    -
    -
    -
    PHP 8.3
    -
    - dateTime = $dateTime; - } - - public function __clone() - { - $this->dateTime = clone $this->dateTime; - } -} - -$today = new Foo(new \DateTime()); -$tomorrow = clone $today; - -$tomorrow->dateTime->modify('+1 day'); -PHP - ); ?> -
    -
    -
    -
    @@ -392,7 +430,8 @@ PHP

      -
    • +
    • +
    • From 3f00e0b3542021b7622aeeccc8fcf67fc57c6760 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 3 Nov 2023 16:08:27 +0300 Subject: [PATCH 20/35] Add EC support in OpenSSL --- releases/8.3/languages/en.php | 1 + releases/8.3/release.inc | 1 + 2 files changed, 2 insertions(+) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 8b99a7c512..f7eb1ef4b8 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -29,6 +29,7 @@ 'new_socket' => 'New socket_atmark() function.', 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', + 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', 'bc_title' => 'Deprecations and backward compatibility breaks', 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 6b8c60093b..3057e27325 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -439,6 +439,7 @@ PHP
    • +
    From dab41e022c3ed1109246956705b2408eeb297799 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 3 Nov 2023 20:44:56 +0300 Subject: [PATCH 21/35] Update releases/8.3/languages/en.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/languages/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index f7eb1ef4b8..50187ed22c 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -11,7 +11,7 @@ 'json_validate_title' => 'New json_validate() function', 'typed_class_constants_title' => 'Typed class constants', 'override_title' => '#[\Override] attribute', - 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', + 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', 'randomizer_getfloat_nextfloat_title' => 'New Randomizer::getFloat() and Randomizer::nextFloat() methods', 'randomizer_getfloat_nextfloat_description' => 'The algorithm used is the γ-section algorithm as published in: Drawing Random From 693e0b94a6ad0c44bec078b0dae82dd2eff46ea1 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 3 Nov 2023 21:41:44 +0300 Subject: [PATCH 22/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/languages/en.php | 4 ++++ releases/8.3/release.inc | 26 ++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 50187ed22c..580c9cfb43 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -8,10 +8,14 @@ 'upgrade_now' => 'Upgrade to PHP 8.3 now!', 'readonly_title' => 'Readonly amendments', + 'readonly_description' => 'readonly properties may now be modified once within the magic __clone method to enable deep-cloning of readonly properties.', 'json_validate_title' => 'New json_validate() function', + 'json_validate_description' => 'json_validate() allows to check if a string is syntactically valid JSON, while being more efficient than json_decode().', 'typed_class_constants_title' => 'Typed class constants', 'override_title' => '#[\Override] attribute', + 'override_description' => 'By adding the #[\Override] attribute to a method, PHP will ensure that a method with the same name exists in a parent class or in an implemented interface. Adding the attribute makes it clear that overriding a parent method is intentional and simplifies refactoring, because the removal of an overridden parent method will be detected.', 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', + 'randomizer_getbytesfromstring_description' => 'The Random Extension that was added in PHP 8.2 was extended by a new method to generate random strings consisting of specific bytes only. This method allows to easily generate random identifiers, such as domain names, and numeric strings of arbitrary length.', 'randomizer_getfloat_nextfloat_title' => 'New Randomizer::getFloat() and Randomizer::nextFloat() methods', 'randomizer_getfloat_nextfloat_description' => 'The algorithm used is the γ-section algorithm as published in: Drawing Random diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 3057e27325..4f695dae7f 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -194,6 +194,10 @@ PHP
    + +
    + +
    @@ -236,13 +240,13 @@ PHP dateTime = $dateTime; - } + function __construct(\DateTime $dateTime) { + $this->dateTime = $dateTime; + } - public function __clone() + public function __clone() { $this->dateTime = clone $this->dateTime; } @@ -257,6 +261,9 @@ PHP
    +
    + +
    @@ -270,7 +277,7 @@ PHP
    +
    + +
    @@ -358,6 +368,10 @@ PHP
    + +
    + +
    From e4c84e30e375b38a7cf90531b2f2d7c650f39692 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 7 Nov 2023 21:13:33 +0300 Subject: [PATCH 23/35] Links to docs --- releases/8.3/languages/en.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 580c9cfb43..5de007c31f 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -24,15 +24,15 @@ 'dynamic_class_constant_fetch_title' => 'Dynamic class constant fetch', 'new_classes_title' => 'New Classes, Interfaces, and Functions', - 'new_dom' => 'New DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), and DOMParentNode::replaceChildren() methods.', - 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', + 'new_dom' => 'New DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), and DOMParentNode::replaceChildren() methods.', + 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', - 'new_mb_str_pad' => 'New mb_str_pad() function.', + 'new_mb_str_pad' => 'New mb_str_pad() function.', 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', 'new_socket' => 'New socket_atmark() function.', - 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', - 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', + 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', + 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', 'bc_title' => 'Deprecations and backward compatibility breaks', From 27cc8d26d2ec6c2ac7a6dc5d55c73e5b1d804734 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Wed, 15 Nov 2023 15:19:26 +0300 Subject: [PATCH 24/35] Links to docs --- releases/8.3/languages/en.php | 6 +++--- releases/8.3/release.inc | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 5de007c31f..f7fedbbdb4 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -28,8 +28,8 @@ 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', 'new_mb_str_pad' => 'New mb_str_pad() function.', - 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', - 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', + 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', + 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', 'new_socket' => 'New socket_atmark() function.', 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', @@ -42,7 +42,7 @@ 'bc_traits' => 'Changes in re-declaration of static properties in traits.', 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', - 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', 'footer_title' => 'Better performance, better syntax, improved type safety.', 'footer_description' => '

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

    diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 4f695dae7f..da9fed3f74 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -270,6 +270,7 @@ PHP

    RFC +

    From 8b040239441d06ac5a24b650f70ae56db57f8fd7 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Thu, 16 Nov 2023 19:56:27 +0300 Subject: [PATCH 25/35] Add links to Intl docs --- releases/8.3/languages/en.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index f7fedbbdb4..88c24d2ec2 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -25,7 +25,7 @@ 'new_classes_title' => 'New Classes, Interfaces, and Functions', 'new_dom' => 'New DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains(), and DOMParentNode::replaceChildren() methods.', - 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', + 'new_intl' => 'New IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate(), and IntlGregorianCalendar::createFromDateTime() methods.', 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', 'new_mb_str_pad' => 'New mb_str_pad() function.', 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', From ac55c2ba6d8827d40a433f6af45dd7cdaf87c085 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 17 Nov 2023 12:33:58 +0300 Subject: [PATCH 26/35] Temporary hide PHP 8.3 refs --- include/header.inc | 4 ++-- index.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/header.inc b/include/header.inc index 0ad3050053..2aff9d8a78 100644 --- a/include/header.inc +++ b/include/header.inc @@ -105,8 +105,8 @@ if (!isset($config["languages"])) {
  • ">Get Involved
  • ">Help
  • "> - - php8.3 + + php8.2
  • diff --git a/index.php b/index.php index fc42650218..c935b22344 100644 --- a/index.php +++ b/index.php @@ -95,7 +95,7 @@

    A popular general-purpose scripting language that is especially suited to web development.
    Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.

    EOF; From da3fcea1a3a5fa60bde22bf9cca3d9f9b9eaae41 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 17 Nov 2023 13:06:12 +0300 Subject: [PATCH 27/35] Add Russian translation, English wording --- releases/8.3/common.php | 1 + releases/8.3/languages/en.php | 4 +-- releases/8.3/languages/ru.php | 49 +++++++++++++++++++++++++++++++++++ releases/8.3/ru.php | 5 ++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 releases/8.3/languages/ru.php create mode 100644 releases/8.3/ru.php diff --git a/releases/8.3/common.php b/releases/8.3/common.php index 0d9a11b86b..249e08239c 100644 --- a/releases/8.3/common.php +++ b/releases/8.3/common.php @@ -41,6 +41,7 @@ function common_header(string $description): void { function language_chooser(string $currentLang): void { $LANGUAGES = [ 'en' => 'English', + 'ru' => 'Russian', ]; // Print out the form with all the options diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 88c24d2ec2..68b858f106 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -29,10 +29,10 @@ 'new_ldap' => 'New ldap_connect_wallet(), and ldap_exop_sync() functions.', 'new_mb_str_pad' => 'New mb_str_pad() function.', 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', - 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', + 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', 'new_socket' => 'New socket_atmark() function.', 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', - 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() function.', + 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() method.', 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', 'bc_title' => 'Deprecations and backward compatibility breaks', diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php new file mode 100644 index 0000000000..aaa0f4d627 --- /dev/null +++ b/releases/8.3/languages/ru.php @@ -0,0 +1,49 @@ + 'PHP 8.3 — большое обновление языка PHP. Улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения Randomizer, улучшение производительности и многое другое', + 'documentation' => 'Документация', + 'main_title' => 'выпущен!', + 'main_subtitle' => 'PHP 8.3 — большое обновление языка PHP.
    Оно содержит множество новых возможностей, включая улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения класса Randomizer, улучшение производительности и многое другое', + 'upgrade_now' => 'Переходите на PHP 8.3!', + + 'readonly_title' => 'Улучшения readonly-свойств', + 'readonly_description' => 'Свойства, доступные только для чтения (readonly) теперь могут быть изменены один раз с помощью магического метода __clone для обеспечения возможности глубокого клонирования readonly-свойств.', + 'json_validate_title' => 'Новая функция json_validate()', + 'json_validate_description' => 'Функция json_validate() позволяет проверить, является ли строка синтаксически корректным JSON, при этом она более эффективна, чем функция json_decode().', + 'typed_class_constants_title' => 'Типизированные константы классов', + 'override_title' => 'Атрибут #[\Override]', + 'override_description' => 'Добавив методу атрибут #[\Override], PHP убедится, что метод с таким же именем существует в родительском классе или в реализованном интерфейсе. Добавление атрибута даёт понять, что переопределение родительского метода является намеренным и упрощает рефакторинг, поскольку удаление переопределённого родительского метода будет обнаружено.', + 'randomizer_getbytesfromstring_title' => 'Новый метод Randomizer::getBytesFromString()', + 'randomizer_getbytesfromstring_description' => 'Модуль Random, добавленный в PHP 8.3, был дополнен новым методом генерации случайных строк, состоящих только из определённых байтов. Этот метод позволяет легко генерировать случайные идентификаторы, например, имена доменов и числовые строки произвольной длины.', + 'randomizer_getfloat_nextfloat_title' => 'Новые методы Randomizer::getFloat() и Randomizer::nextFloat()', + 'randomizer_getfloat_nextfloat_description' => 'В качестве алгоритма используется алгоритм γ-секции, опубликованный в статье: + Drawing Random Floating-Point Numbers from an Interval. + Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.', + 'dynamic_class_constant_fetch_title' => 'Динамическое получение констант класса', + + 'new_classes_title' => 'Новые классы, интерфейсы и функции', + 'new_dom' => 'Новые методы DOMElement::getAttributeNames(), DOMElement::insertAdjacentElement(), DOMElement::insertAdjacentText(), DOMElement::toggleAttribute(), DOMNode::contains(), DOMNode::getRootNode(), DOMNode::isEqualNode(), DOMNameSpaceNode::contains() и DOMParentNode::replaceChildren().', + 'new_intl' => 'Новые методы IntlCalendar::setDate(), IntlCalendar::setDateTime(), IntlGregorianCalendar::createFromDate() и IntlGregorianCalendar::createFromDateTime().', + 'new_ldap' => 'Новые функции ldap_connect_wallet() и ldap_exop_sync().', + 'new_mb_str_pad' => 'Новая функция mb_str_pad().', + 'new_posix' => 'Новые функции posix_sysconf(), posix_pathconf(), posix_fpathconf() и posix_eaccess().', + 'new_reflection' => 'Новый метод ReflectionMethod::createFromMethodName().', + 'new_socket' => 'Новая функция socket_atmark().', + 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', + 'new_ziparchive' => 'Новый метод ZipArchive::getArchiveFlag().', + 'new_openssl_ec' => 'Поддержка генерации EC-ключей с пользовательскими EC-параметрами в модуле OpenSSL.', + + 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', + 'bc_datetime' => 'Более подходящие исключения в модуле Date/Time.', + 'bc_arrays' => 'Присвоение отрицательного индекса n пустому массиву теперь гарантирует, что следующим индексом будет n + 1, а не 0.', + 'bc_range' => 'Изменения в функции range().', + 'bc_traits' => 'Изменения в повторном объявлении статических свойств в трейтах.', + 'bc_umultipledecimalseparators' => 'Констант U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', + 'bc_reflection' => 'ReflectionClass::getStaticProperties() теперь не возвращает значение null.', + + 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', + 'footer_description' => '

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

    +

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

    ', +]; diff --git a/releases/8.3/ru.php b/releases/8.3/ru.php new file mode 100644 index 0000000000..4aefaf9a8c --- /dev/null +++ b/releases/8.3/ru.php @@ -0,0 +1,5 @@ + Date: Fri, 17 Nov 2023 13:57:35 +0300 Subject: [PATCH 28/35] Typos --- releases/8.3/languages/ru.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index aaa0f4d627..6ceca9ebce 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -13,9 +13,9 @@ 'json_validate_description' => 'Функция json_validate() позволяет проверить, является ли строка синтаксически корректным JSON, при этом она более эффективна, чем функция json_decode().', 'typed_class_constants_title' => 'Типизированные константы классов', 'override_title' => 'Атрибут #[\Override]', - 'override_description' => 'Добавив методу атрибут #[\Override], PHP убедится, что метод с таким же именем существует в родительском классе или в реализованном интерфейсе. Добавление атрибута даёт понять, что переопределение родительского метода является намеренным и упрощает рефакторинг, поскольку удаление переопределённого родительского метода будет обнаружено.', + 'override_description' => 'Добавив методу атрибут #[\Override], PHP убедится, что метод с таким же именем существует в родительском классе или в реализованном интерфейсе. Добавление атрибута даёт понять, что переопределение родительского метода является намеренным, а также упрощает рефакторинг, поскольку удаление переопределённого родительского метода будет обнаружено.', 'randomizer_getbytesfromstring_title' => 'Новый метод Randomizer::getBytesFromString()', - 'randomizer_getbytesfromstring_description' => 'Модуль Random, добавленный в PHP 8.3, был дополнен новым методом генерации случайных строк, состоящих только из определённых байтов. Этот метод позволяет легко генерировать случайные идентификаторы, например, имена доменов и числовые строки произвольной длины.', + 'randomizer_getbytesfromstring_description' => 'Модуль Random, добавленный в PHP 8.2, был дополнен новым методом генерации случайных строк, состоящих только из определённых байтов. Этот метод позволяет легко генерировать случайные идентификаторы, например, имена доменов и числовые строки произвольной длины.', 'randomizer_getfloat_nextfloat_title' => 'Новые методы Randomizer::getFloat() и Randomizer::nextFloat()', 'randomizer_getfloat_nextfloat_description' => 'В качестве алгоритма используется алгоритм γ-секции, опубликованный в статье: Drawing Random Floating-Point Numbers from an Interval. @@ -39,7 +39,7 @@ 'bc_arrays' => 'Присвоение отрицательного индекса n пустому массиву теперь гарантирует, что следующим индексом будет n + 1, а не 0.', 'bc_range' => 'Изменения в функции range().', 'bc_traits' => 'Изменения в повторном объявлении статических свойств в трейтах.', - 'bc_umultipledecimalseparators' => 'Констант U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', + 'bc_umultipledecimalseparators' => 'Константа U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() теперь не возвращает значение null.', From 21efcbe4b5906eb326fc83a8e3422895336aa8a7 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Fri, 17 Nov 2023 22:16:41 +0300 Subject: [PATCH 29/35] Update releases/8.3/release.inc Co-authored-by: Tim Bond --- releases/8.3/release.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index da9fed3f74..63b2cf7e86 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -270,7 +270,7 @@ PHP

    RFC - +

    From 9dc7e569f680d8bc8808cd78660569309498bc25 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Sat, 18 Nov 2023 11:30:51 +0300 Subject: [PATCH 30/35] Add links to docs --- releases/8.3/languages/en.php | 4 ++-- releases/8.3/languages/ru.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 68b858f106..5a94950766 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -30,8 +30,8 @@ 'new_mb_str_pad' => 'New mb_str_pad() function.', 'new_posix' => 'New posix_sysconf(), posix_pathconf(), posix_fpathconf(), and posix_eaccess() functions.', 'new_reflection' => 'New ReflectionMethod::createFromMethodName() method.', - 'new_socket' => 'New socket_atmark() function.', - 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', + 'new_socket' => 'New socket_atmark() function.', + 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() method.', 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index 6ceca9ebce..3897ae9cd0 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -29,8 +29,8 @@ 'new_mb_str_pad' => 'Новая функция mb_str_pad().', 'new_posix' => 'Новые функции posix_sysconf(), posix_pathconf(), posix_fpathconf() и posix_eaccess().', 'new_reflection' => 'Новый метод ReflectionMethod::createFromMethodName().', - 'new_socket' => 'Новая функция socket_atmark().', - 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', + 'new_socket' => 'Новая функция socket_atmark().', + 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', 'new_ziparchive' => 'Новый метод ZipArchive::getArchiveFlag().', 'new_openssl_ec' => 'Поддержка генерации EC-ключей с пользовательскими EC-параметрами в модуле OpenSSL.', From e5d2c388f89349c30a52bdd9f21651145ba58fd2 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Sat, 18 Nov 2023 15:51:29 +0300 Subject: [PATCH 31/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/languages/en.php | 4 ++-- releases/8.3/release.inc | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 5a94950766..72339f6a3c 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -7,12 +7,12 @@ 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', 'upgrade_now' => 'Upgrade to PHP 8.3 now!', - 'readonly_title' => 'Readonly amendments', + 'readonly_title' => 'Deep-cloning of readonly properties', 'readonly_description' => 'readonly properties may now be modified once within the magic __clone method to enable deep-cloning of readonly properties.', 'json_validate_title' => 'New json_validate() function', 'json_validate_description' => 'json_validate() allows to check if a string is syntactically valid JSON, while being more efficient than json_decode().', 'typed_class_constants_title' => 'Typed class constants', - 'override_title' => '#[\Override] attribute', + 'override_title' => 'New #[\Override] attribute', 'override_description' => 'By adding the #[\Override] attribute to a method, PHP will ensure that a method with the same name exists in a parent class or in an implemented interface. Adding the attribute makes it clear that overriding a parent method is intentional and simplifies refactoring, because the removal of an overridden parent method will be detected.', 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', 'randomizer_getbytesfromstring_description' => 'The Random Extension that was added in PHP 8.2 was extended by a new method to generate random strings consisting of specific bytes only. This method allows to easily generate random identifiers, such as domain names, and numeric strings of arbitrary length.', diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 63b2cf7e86..00dcaffedf 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -49,12 +49,13 @@ common_header(message('common_header', $lang));
    From 4be5e4cdc4ca3b4a08a04d38823f892bd40c595a Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Sat, 18 Nov 2023 16:10:14 +0300 Subject: [PATCH 32/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/languages/en.php | 9 +++------ releases/8.3/languages/ru.php | 12 +++++------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index 72339f6a3c..cd9d324797 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -1,7 +1,7 @@ 'PHP 8.3 is a major update of the PHP language. Readonly amendments, Typed class constants, #[Override] attribute, Randomizer additions, performance improvements and more', + 'common_header' => 'PHP 8.3 is a major update of the PHP language. It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', 'documentation' => 'Doc', 'main_title' => 'Released!', 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', @@ -17,10 +17,7 @@ 'randomizer_getbytesfromstring_title' => 'New Randomizer::getBytesFromString() method', 'randomizer_getbytesfromstring_description' => 'The Random Extension that was added in PHP 8.2 was extended by a new method to generate random strings consisting of specific bytes only. This method allows to easily generate random identifiers, such as domain names, and numeric strings of arbitrary length.', 'randomizer_getfloat_nextfloat_title' => 'New Randomizer::getFloat() and Randomizer::nextFloat() methods', - 'randomizer_getfloat_nextfloat_description' => 'The algorithm used is the γ-section algorithm as published in: - Drawing Random - Floating-Point Numbers from an Interval. - Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.', + 'randomizer_getfloat_nextfloat_description' => '

    Due to the limited precision and implicit rounding of floating point numbers, generating an unbiased float lying within a specific interval is non-trivial and the commonly used userland solutions may generate biased results or numbers outside the requested range.

    The Randomizer was also extended with two methods to generate random floats in an unbiased fashion. The Randomizer::getFloat() method uses the γ-section algorithm that was published in Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

    ', 'dynamic_class_constant_fetch_title' => 'Dynamic class constant fetch', 'new_classes_title' => 'New Classes, Interfaces, and Functions', @@ -41,7 +38,7 @@ 'bc_range' => 'Changes to the range() function.', 'bc_traits' => 'Changes in re-declaration of static properties in traits.', 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', - 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', + 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', 'footer_title' => 'Better performance, better syntax, improved type safety.', diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index 3897ae9cd0..e56b5d3511 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -1,25 +1,23 @@ 'PHP 8.3 — большое обновление языка PHP. Улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения Randomizer, улучшение производительности и многое другое', + 'common_header' => 'PHP 8.3 — большое обновление языка PHP. Оно содержит множество новых возможностей, включая улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения класса Randomizer, улучшение производительности и многое другое', 'documentation' => 'Документация', 'main_title' => 'выпущен!', 'main_subtitle' => 'PHP 8.3 — большое обновление языка PHP.
    Оно содержит множество новых возможностей, включая улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения класса Randomizer, улучшение производительности и многое другое', 'upgrade_now' => 'Переходите на PHP 8.3!', - 'readonly_title' => 'Улучшения readonly-свойств', + 'readonly_title' => 'Глубокое клонирование readonly-свойств', 'readonly_description' => 'Свойства, доступные только для чтения (readonly) теперь могут быть изменены один раз с помощью магического метода __clone для обеспечения возможности глубокого клонирования readonly-свойств.', 'json_validate_title' => 'Новая функция json_validate()', 'json_validate_description' => 'Функция json_validate() позволяет проверить, является ли строка синтаксически корректным JSON, при этом она более эффективна, чем функция json_decode().', 'typed_class_constants_title' => 'Типизированные константы классов', - 'override_title' => 'Атрибут #[\Override]', + 'override_title' => 'Новый атрибут #[\Override]', 'override_description' => 'Добавив методу атрибут #[\Override], PHP убедится, что метод с таким же именем существует в родительском классе или в реализованном интерфейсе. Добавление атрибута даёт понять, что переопределение родительского метода является намеренным, а также упрощает рефакторинг, поскольку удаление переопределённого родительского метода будет обнаружено.', 'randomizer_getbytesfromstring_title' => 'Новый метод Randomizer::getBytesFromString()', 'randomizer_getbytesfromstring_description' => 'Модуль Random, добавленный в PHP 8.2, был дополнен новым методом генерации случайных строк, состоящих только из определённых байтов. Этот метод позволяет легко генерировать случайные идентификаторы, например, имена доменов и числовые строки произвольной длины.', 'randomizer_getfloat_nextfloat_title' => 'Новые методы Randomizer::getFloat() и Randomizer::nextFloat()', - 'randomizer_getfloat_nextfloat_description' => 'В качестве алгоритма используется алгоритм γ-секции, опубликованный в статье: - Drawing Random Floating-Point Numbers from an Interval. - Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.', + 'randomizer_getfloat_nextfloat_description' => '

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

    Класс Randomizer был расширен двумя методами, позволяющими генерировать случайные числа с плавающей точкой несмещённым образом. Метод Randomizer::getFloat() использует алгоритм γ-секции, который был опубликован в Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

    ', 'dynamic_class_constant_fetch_title' => 'Динамическое получение констант класса', 'new_classes_title' => 'Новые классы, интерфейсы и функции', @@ -40,7 +38,7 @@ 'bc_range' => 'Изменения в функции range().', 'bc_traits' => 'Изменения в повторном объявлении статических свойств в трейтах.', 'bc_umultipledecimalseparators' => 'Константа U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', - 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', + 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() теперь не возвращает значение null.', 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', From 2c72e2744acf953a7bf7573e59461964c7af90cb Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Sat, 18 Nov 2023 17:11:16 +0300 Subject: [PATCH 33/35] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Düsterhus --- releases/8.3/languages/en.php | 4 ++-- releases/8.3/languages/ru.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index cd9d324797..e505c31ce5 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -1,10 +1,10 @@ 'PHP 8.3 is a major update of the PHP language. It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', + 'common_header' => 'PHP 8.3 is a major update of the PHP language. It contains many new features, such as explicit typing of class constants, deep-cloning of readonly properties and additions to the randomness functionality. As always it also includes performance improvements, bug fixes and general cleanup.', 'documentation' => 'Doc', 'main_title' => 'Released!', - 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, including Readonly amendments, Typed class constants, Randomizer additions, performance improvements and more.', + 'main_subtitle' => 'PHP 8.3 is a major update of the PHP language.
    It contains many new features, such as explicit typing of class constants, deep-cloning of readonly properties and additions to the randomness functionality. As always it also includes performance improvements, bug fixes and general cleanup.', 'upgrade_now' => 'Upgrade to PHP 8.3 now!', 'readonly_title' => 'Deep-cloning of readonly properties', diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index e56b5d3511..25747eb0d1 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -1,10 +1,10 @@ 'PHP 8.3 — большое обновление языка PHP. Оно содержит множество новых возможностей, включая улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения класса Randomizer, улучшение производительности и многое другое', + 'common_header' => 'PHP 8.3 — большое обновление языка PHP. Оно содержит множество новых возможностей, таких как явная типизация констант классов, глубокое клонирование readonly-свойств, а также улучшения класса Randomizer. Как всегда, в нём также улучшена производительность, исправлены ошибки и многое другое.', 'documentation' => 'Документация', 'main_title' => 'выпущен!', - 'main_subtitle' => 'PHP 8.3 — большое обновление языка PHP.
    Оно содержит множество новых возможностей, включая улучшения readonly-свойств, типизированные константы классов, атрибут #[Override], улучшения класса Randomizer, улучшение производительности и многое другое', + 'main_subtitle' => 'PHP 8.3 — большое обновление языка PHP.
    Оно содержит множество новых возможностей, таких как явная типизация констант классов, глубокое клонирование readonly-свойств, а также улучшения класса Randomizer. Как всегда, в нём также улучшена производительность, исправлены ошибки и многое другое.', 'upgrade_now' => 'Переходите на PHP 8.3!', 'readonly_title' => 'Глубокое клонирование readonly-свойств', From 5a5cfc716b6c385673e4d9e6cb806783e5cfa5a0 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 21 Nov 2023 11:46:41 +0300 Subject: [PATCH 34/35] Add new INI setting and deprecate old ones in PHP 8.3 --- releases/8.3/languages/en.php | 2 ++ releases/8.3/languages/ru.php | 2 ++ releases/8.3/release.inc | 2 ++ 3 files changed, 6 insertions(+) diff --git a/releases/8.3/languages/en.php b/releases/8.3/languages/en.php index e505c31ce5..0ad1638dd4 100644 --- a/releases/8.3/languages/en.php +++ b/releases/8.3/languages/en.php @@ -31,6 +31,7 @@ 'new_str' => 'New str_increment(), str_decrement(), and stream_context_set_options() functions.', 'new_ziparchive' => 'New ZipArchive::getArchiveFlag() method.', 'new_openssl_ec' => 'Support for generation EC keys with custom EC parameters in OpenSSL extension.', + 'new_ini' => 'New INI setting zend.max_allowed_stack_size to set the maximum allowed stack size.', 'bc_title' => 'Deprecations and backward compatibility breaks', 'bc_datetime' => 'More Appropriate Date/Time Exceptions.', @@ -40,6 +41,7 @@ 'bc_umultipledecimalseparators' => 'The U_MULTIPLE_DECIMAL_SEPERATORS constant is deprecated in favor of U_MULTIPLE_DECIMAL_SEPARATORS.', 'bc_mtrand' => 'The MT_RAND_PHP Mt19937 variant is deprecated.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() is no longer nullable.', + 'bc_ini' => 'INI settings assert.active, assert.bail, assert.callback, assert.exception, and assert.warning have been deprecated.', 'footer_title' => 'Better performance, better syntax, improved type safety.', 'footer_description' => '

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

    diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index 25747eb0d1..dcb32c3490 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -31,6 +31,7 @@ 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', 'new_ziparchive' => 'Новый метод ZipArchive::getArchiveFlag().', 'new_openssl_ec' => 'Поддержка генерации EC-ключей с пользовательскими EC-параметрами в модуле OpenSSL.', + 'new_ini' => 'Новый параметр INI zend.max_allowed_stack_size для установки максимально допустимого размера стека.', 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', 'bc_datetime' => 'Более подходящие исключения в модуле Date/Time.', @@ -40,6 +41,7 @@ 'bc_umultipledecimalseparators' => 'Константа U_MULTIPLE_DECIMAL_SEPERATORS объявлена устаревшей, вместо неё рекомендуется использовать константу U_MULTIPLE_DECIMAL_SEPARATORS.', 'bc_mtrand' => 'Вариант Mt19937 MT_RAND_PHP объявлен устаревшим.', 'bc_reflection' => 'ReflectionClass::getStaticProperties() теперь не возвращает значение null.', + 'bc_ini' => 'Параметры INI assert.active, assert.bail, assert.callback, assert.exception и assert.warning объявлены устаревшими.', 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', 'footer_description' => '

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

    diff --git a/releases/8.3/release.inc b/releases/8.3/release.inc index 00dcaffedf..501f873067 100644 --- a/releases/8.3/release.inc +++ b/releases/8.3/release.inc @@ -457,6 +457,7 @@ PHP
  • +
  • @@ -472,6 +473,7 @@ PHP
  • +
  • From 50ea4eac0ef41b202fa5a177d6c4d4e4caf51813 Mon Sep 17 00:00:00 2001 From: Sergey Panteleev Date: Tue, 21 Nov 2023 12:18:44 +0300 Subject: [PATCH 35/35] Fix --- releases/8.3/languages/ru.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/8.3/languages/ru.php b/releases/8.3/languages/ru.php index dcb32c3490..cef2e7e8fd 100644 --- a/releases/8.3/languages/ru.php +++ b/releases/8.3/languages/ru.php @@ -31,7 +31,7 @@ 'new_str' => 'Новые функции str_increment(), str_decrement() и stream_context_set_options().', 'new_ziparchive' => 'Новый метод ZipArchive::getArchiveFlag().', 'new_openssl_ec' => 'Поддержка генерации EC-ключей с пользовательскими EC-параметрами в модуле OpenSSL.', - 'new_ini' => 'Новый параметр INI zend.max_allowed_stack_size для установки максимально допустимого размера стека.', + 'new_ini' => 'Новый параметр INI zend.max_allowed_stack_size для установки максимально допустимого размера стека.', 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', 'bc_datetime' => 'Более подходящие исключения в модуле Date/Time.',