[intl] Preserve PHP-side state when cloning formatters - #23652
Open
iliaal wants to merge 1 commit into
Open
Conversation
Member
|
I'd suggest to add this test <?php
$m = new MessageFormatter('en_US', '{0,number} | {1,time,short} | {2,date,medium}');
$dt = new DateTimeImmutable('2026-01-02 03:04:05', new DateTimeZone('UTC'));
$m->format([1, $dt, $dt]);
$mc = clone $m;
$original = $m->format([1, $dt, $dt]);
$cloned = $mc->format([1, $dt, $dt]);
var_dump($mc->getPattern());
var_dump($original === $cloned);
?>Otherwise this looks good to me. |
IntlDateFormatter_object_clone() left date_type, time_type, calendar and requested_locale at their constructor defaults and MessageFormatter_object_ clone() dropped orig_format/orig_format_len/tz_set, so a cloned formatter reported wrong types/calendar/pattern and lost the requested locale used by datefmt_set_calendar(). The clone handlers now copy these fields alongside the ICU handle; msgformat_data.arg_types is deliberately not copied since it is a lazily rebuilt cache derived from the cloned ICU formatter. Sibling audit: NumberFormatter, IntlCalendar, SpoofChecker and Transliterator carry no other PHP-side scalar state in their clone paths.
iliaal
force-pushed
the
fix/aph-intl-datefmt-clone-meta-2ey-84
branch
from
September 11, 2026 10:49
c0bc482 to
30a6344
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cloning IntlDateFormatter left dateType, timeType, calendar, and the requested locale at constructor defaults, and cloning MessageFormatter dropped its pattern. The clone handlers now copy those PHP-side fields with the ICU handle.