Edit report at https://bugs.php.net/bug.php?id=79975&edit=1
ID: 79975
Comment by: mark at mark-story dot com
Reported by: corey dot taylor dot fl at gmail dot com
Summary: DateTime::createFromFormat returns static type
Status: Open
Type: Bug
Package: *General Issues
PHP Version: 8.0.0beta1
Block user comment: N
Private report: N
New Comment:
If the subclass is going to be returned by DateTime::createFromFormat() shouldn't its
constructor also be used?
https://3v4l.org/LqeX2
Shows that while the subclass is returned, its constructor hasn't been returned which is
something I would expect.
Previous Comments:
------------------------------------------------------------------------
[2020-08-14 09:33:57] corey dot taylor dot fl at gmail dot com
One issue we will have is knowing when this object was created.
https://3v4l.org/k5gDZ
Is there no indication that the derived class was instantiated from createFromFormat()?
------------------------------------------------------------------------
[2020-08-13 23:17:20] corey dot taylor dot fl at gmail dot com
As part of the Chronos (date/time library), we have a Date type that wraps DateTime and handles
ensuring date-only values.
There is logic that checks if creating an instance from a Date object or not to determine what to
fix up. With this change, the unfixed instance is simply cloned.
Since DateTime::createFromFormat('Y-m-d') takes the current time all this logic was added
to ensure construction was valid.
To be clear, this behavior seems like the correct behavior and should have been the original
behavior, but since this will take some re-design to work with PHP 7 and 8, it's worth checking
this won't revert back.
------------------------------------------------------------------------
[2020-08-13 22:38:16] derick@php.net
This is indeed an intended big fix. As this change doesn't violate LSP (the inherited child
class still follows the is_a relationship with DateTime), how does it cause a problem in your
situation?
------------------------------------------------------------------------
[2020-08-13 22:26:37] corey dot taylor dot fl at gmail dot com
Description:
------------
I don't know if this is actually a bug or intended behavior or undefined behavior. However,
since it's been consistent up to 8.0.0beta1, I thought I'd report the change.
https://3v4l.org/dgunY
DateTime::createFromFormat() used to always return a DateTime instance if called from a class that
extended DateTime and wrapped createFromFormat().
Now, it is returning the static type. In this example,that is an ExtendsDateTime instance.
https://bugs.php.net/bug.php?id=60302
Looking, I see a very old bug that suggests this was supposed to be the fixed behavior, but clearly
wasn't. We have some low level framework behavior keyed off the type of instance constructed,
so we'd like to make sure this is the intended switch for PHP 8.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79975&edit=1