Em 2013-02-20 9:41, Stas Malyshev escreveu:
There's nothing that "everybody" is
doing - there are tons of different usage patterns, some of them
common,
some incompatible. We need to look on what is more probable - that
people use DateTime as hint for operations that do not modify the
incoming object or that they do modify it and also would put
DateTimeImmutable in this code.
No, we do not need to look on what is more probable. It's only when we
select this very ill-advised option, that we need to start guessing if
people used all the guarantees of DateTime (namely its side-effects) or
not.
So on one side we have existing code that would not accept
DateTimeImmutable without extensive modification,
To "accept a DateTimeImmutable" is not the same as "no recoverable
fatal error when a DateTimeImmutable is passed". You can't possibly know
whether passing a DateTimeImmutable is safe without reviewing the code
on all the call hierarchy starting from where your DateTimeImmutable is
passed.
unless we create the
inheritance, on the other side we have some code that modifies
DateTime
and should be protected from passing DateTimeImmutable - but there's
no
such code yet since nobody passes DateTimeImmutable anywhere yet, so
we
don't make any problem for existing code.
"[C]ode that modifies DateTime and should be protected from passing
DateTimeImmutable" DOES exist already. Saying that it's not a problem
for existing code because no one passes DateTimeImmutable is a
misleading statement -- it assumes codebases exist in isolation. But
current libraries that take DateTime will still be used in 5.5; in fact,
that's the basis of your whole argument for this choice.
I find it highly likely that majoirty of DateTime users don't care if
it's mutable or not since they either don't change it (most frequent
use
case) or use something like $foo = $bar->modify("+1 day"); and never
rely on the fact that $bar was modified. Of course, I have no data
about
how many but I find it highly likely that many users simply don't
care
about the difference.
Here is some data:
http://code.google.com/codesearch#search/&q=%5C$date-%3Emodify%20lang:php&type=cs&sq=
As you can see, your assumption is false. In the majority of cases,
there is no assignment.
--
Gustavo Lopes
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php