Re: [PHP-DEV] DateTime improvement

2012-12-26 Thread Derick Rethans
Stas Malyshev smalys...@sugarcrm.com wrote:

  Sebastian had responded off-list that he'd rather have DateTime
 inherit 
  from DateTimeImmutable, instead of the current variant where 
  DateTimeImmutable inherits DateTime. While this OO-design principle
 wise 
  makes perfect sense, practically it is not as handy. I've played
 with a 
 
 Actually, I would claim it doesn't make perfect sense, since it
 would
 mean DateTime would violate DateTimeImmutable's contract of being,
 well,
 immutable. Strictly speaking, they can not either extend from other
 one,
 since they have APIs which are not subset of each other. However,
 doing
 it strictly OO would mean getting into Java-esque web of interfaces,
 abstract classes and implementation classes, which would suck.
 As for established practice, everybody expects DateTime, so IMHO we
 should leave DateTime as base class even though it's not strictly
 OO-pure.
 
 Speaking of derived classes, though, I wonder how hard it would be to
 make DateTime factory methods - such as createFromFormat - to be able
 to
 produce instance of child class? Now if you want to extend DateTime
 and
 use those, you need to implement some weird things like:
 
 $dt = DateTime::createFromFormat($format, $time);
 $mydt = new MyDateTime(@.$dt-getTimestamp());
 
 Maybe there's a better way but I'm not sure what it is.

The above wouldn't quite work as you lose timezone information.
I've thought about this before and we can only do this if we allow to specify 
the class name as extra argument.
I'd like to add this, but it is a bit unrelated to this change.

Derick



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-25 Thread Stas Malyshev
Hi!

 Sebastian had responded off-list that he'd rather have DateTime inherit 
 from DateTimeImmutable, instead of the current variant where 
 DateTimeImmutable inherits DateTime. While this OO-design principle wise 
 makes perfect sense, practically it is not as handy. I've played with a 

Actually, I would claim it doesn't make perfect sense, since it would
mean DateTime would violate DateTimeImmutable's contract of being, well,
immutable. Strictly speaking, they can not either extend from other one,
since they have APIs which are not subset of each other. However, doing
it strictly OO would mean getting into Java-esque web of interfaces,
abstract classes and implementation classes, which would suck.
As for established practice, everybody expects DateTime, so IMHO we
should leave DateTime as base class even though it's not strictly OO-pure.

Speaking of derived classes, though, I wonder how hard it would be to
make DateTime factory methods - such as createFromFormat - to be able to
produce instance of child class? Now if you want to extend DateTime and
use those, you need to implement some weird things like:

$dt = DateTime::createFromFormat($format, $time);
$mydt = new MyDateTime(@.$dt-getTimestamp());

Maybe there's a better way but I'm not sure what it is.

-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-24 Thread Derick Rethans
On Tue, 18 Dec 2012, Adam Harvey wrote:

 On 18 December 2012 04:52, Lars Strojny l...@strojny.net wrote:
  I would go with DateTimeValue or DateTimeImmutable as well.
 
 +1. I'd prefer DateTimeImmutable personally because it describes what
 it is better than the other options.

That's what I have changed it to now[1]. I've also modified 
DatePeriod[2] to allow for immutable objects to be returned. Right now, it will 
return 
DateTimeImmutable objects if the start date object is also 
DateTimeImmutable. In case it is a DateTime object, or an ISO8601 
date-string, the returned objects are of the DateTime class[3].

Sebastian had responded off-list that he'd rather have DateTime inherit 
from DateTimeImmutable, instead of the current variant where 
DateTimeImmutable inherits DateTime. While this OO-design principle wise 
makes perfect sense, practically it is not as handy. I've played with a 
patch to implement it and it works, but lots of messages are now blah 
blah wants a DateTimeImmutable class instead of blah blah wants a 
DateTime class. Although I think having a DateTimeImmutable is a good 
thing, I don't want to confuse too many people (novices!) with weird OO 
terms. And in most cases, people don't care whether DateTime is 
immutable or not. Besides that, it also made the change and the code 
more complex and duplicated. Because of this, I didn't pursue this patch 
any further.

[1] 
http://git.php.net/?p=php-src.git;a=commit;h=6b48ae4580a0e97f7df4f1733eca345755110b96
 
[2] 
http://git.php.net/?p=php-src.git;a=commit;h=042ddf371e84fbb7ba1326e7bd45888e63fb30ef
 
[3] 
http://git.php.net/?p=php-src.git;a=blob;f=ext/date/tests/date_period-immutable.phpt;h=0ec4b4a13025b9494833aa90fa64be7d95f8a261;hb=042ddf371e84fbb7ba1326e7bd45888e63fb30ef

cheers,
Derick

-- 
http://derickrethans.nl | http://xdebug.org
Like Xdebug? Consider a donation: http://xdebug.org/donate.php
twitter: @derickr and @xdebug
Posted with an email client that doesn't mangle email: alpine


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP-DEV] DateTime improvement

2012-12-21 Thread Christian Stoller
What about putting the new DateTimeImmutable (or whatever it will be called) 
into a PHP namespace?
Something like \PHP\Foobar\DateTimeImmutable

Is it generally planned to use namespaces for PHP classes? In my opinion it 
would be nice if the SPL and other classes would be put into such a namespace, 
too. Are there any plans to do that?


Christian Stoller


-Original Message-
From: Peter Cowburn [mailto:petercowb...@gmail.com] 
Sent: Friday, December 21, 2012 1:14 AM
To: Lazare Inepologlou
Cc: Larry Garfield; internals@lists.php.net
Subject: Re: [PHP-DEV] DateTime improvement

On 20 December 2012 20:06, Lazare Inepologlou linep...@gmail.com wrote:
 Of course, I have no idea if anyone in userspace is using
 DateTimeImmutable...

 Well, it seems unlikely, unless he is Yoda or French.

 I mean, in English, it is common to put the adjective in front of the noun,
 isn't it?

Class names aren't particularly subject, too strictly, to English
grammar rules.  Besides, the coding standards [1] dictate the class
name should be prefixed with the 'parent set' (e.g. extension name),
which in this case is not Immutable.

[1] https://github.com/php/php-src/blob/master/CODING_STANDARDS#L152


 Lazare INEPOLOGLOU
 Ingénieur Logiciel



-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php





Re: [PHP-DEV] DateTime improvement

2012-12-21 Thread Derick Rethans
On Thu, 20 Dec 2012, Larry Garfield wrote:

 I've seen DateTimeValue used elsewhere for userspace immutable date 
 time objects.  Whether that indicates we SHOULD or SHOULD NOT use that 
 for an in-C version, I don't know.  (I'm inclined to say 
 should-but-namespace, but I don't know if we're doing that yet.)

http://php.net/manual/en/userlandnaming.rules.php

cheers,
Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-21 Thread Nikita Nefedov
I don't think it would be ok to move just DateTimeImmutable to the  
namespace.
There were proposal to move all the php functions and classes in  
namespaces, so that for example str_replace() could be \Str\replace() and  
array_map() could be \Array\map() and so on.


On Fri, 21 Dec 2012 12:33:04 +0400, Christian Stoller stol...@leonex.de  
wrote:


What about putting the new DateTimeImmutable (or whatever it will be  
called) into a PHP namespace?

Something like \PHP\Foobar\DateTimeImmutable

Is it generally planned to use namespaces for PHP classes? In my opinion  
it would be nice if the SPL and other classes would be put into such a  
namespace, too. Are there any plans to do that?



Christian Stoller


-Original Message-
From: Peter Cowburn [mailto:petercowb...@gmail.com]
Sent: Friday, December 21, 2012 1:14 AM
To: Lazare Inepologlou
Cc: Larry Garfield; internals@lists.php.net
Subject: Re: [PHP-DEV] DateTime improvement

On 20 December 2012 20:06, Lazare Inepologlou linep...@gmail.com wrote:

Of course, I have no idea if anyone in userspace is using

DateTimeImmutable...

Well, it seems unlikely, unless he is Yoda or French.

I mean, in English, it is common to put the adjective in front of the  
noun,

isn't it?


Class names aren't particularly subject, too strictly, to English
grammar rules.  Besides, the coding standards [1] dictate the class
name should be prefixed with the 'parent set' (e.g. extension name),
which in this case is not Immutable.

[1] https://github.com/php/php-src/blob/master/CODING_STANDARDS#L152



Lazare INEPOLOGLOU
Ingénieur Logiciel




--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-20 Thread Larry Garfield
I've seen DateTimeValue used elsewhere for userspace immutable date time 
objects.  Whether that indicates we SHOULD or SHOULD NOT use that for an 
in-C version, I don't know.  (I'm inclined to say should-but-namespace, 
but I don't know if we're doing that yet.)


Of course, I have no idea if anyone in userspace is using 
DateTimeImmutable...


--Larry Garfield

On 12/17/12 2:52 PM, Lars Strojny wrote:

Hi Derick,

I would go with DateTimeValue or DateTimeImmutable as well.

Am 17.12.2012 um 19:42 schrieb Benjamin Eberlei kont...@beberlei.de:


On Mon, Dec 17, 2012 at 5:48 PM, Derick Rethans der...@php.net wrote:
I went for DateTimePoint. Point as in Point in time. I am not too
happy with the name, but I think it works better than DateTimeImmutable
as that just sounds quircky. I'm still fixing up a few things and adding
some test cases. I think I need to make it work with DatePeriod too -
but I haven't looked at that yet.

some suggestions:

DateTimeValue
DateTimeImmutable
DateImmutable
DateFixed
DateStatic
(and as a bonus: DateTime2)





--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-20 Thread Lazare Inepologlou
 Of course, I have no idea if anyone in userspace is using
DateTimeImmutable...

Well, it seems unlikely, unless he is Yoda or French.

I mean, in English, it is common to put the adjective in front of the noun,
isn't it?

Lazare INEPOLOGLOU
Ingénieur Logiciel


2012/12/20 Larry Garfield la...@garfieldtech.com

 I've seen DateTimeValue used elsewhere for userspace immutable date time
 objects.  Whether that indicates we SHOULD or SHOULD NOT use that for an
 in-C version, I don't know.  (I'm inclined to say should-but-namespace, but
 I don't know if we're doing that yet.)

 Of course, I have no idea if anyone in userspace is using
 DateTimeImmutable...

 --Larry Garfield

 On 12/17/12 2:52 PM, Lars Strojny wrote:

 Hi Derick,

 I would go with DateTimeValue or DateTimeImmutable as well.

 Am 17.12.2012 um 19:42 schrieb Benjamin Eberlei kont...@beberlei.de:

  On Mon, Dec 17, 2012 at 5:48 PM, Derick Rethans der...@php.net wrote:
 I went for DateTimePoint. Point as in Point in time. I am not too
 happy with the name, but I think it works better than DateTimeImmutable
 as that just sounds quircky. I'm still fixing up a few things and adding
 some test cases. I think I need to make it work with DatePeriod too -
 but I haven't looked at that yet.

 some suggestions:

 DateTimeValue
 DateTimeImmutable
 DateImmutable
 DateFixed
 DateStatic
 (and as a bonus: DateTime2)




 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] DateTime improvement

2012-12-20 Thread Peter Cowburn
On 20 December 2012 20:06, Lazare Inepologlou linep...@gmail.com wrote:
 Of course, I have no idea if anyone in userspace is using
 DateTimeImmutable...

 Well, it seems unlikely, unless he is Yoda or French.

 I mean, in English, it is common to put the adjective in front of the noun,
 isn't it?

Class names aren't particularly subject, too strictly, to English
grammar rules.  Besides, the coding standards [1] dictate the class
name should be prefixed with the 'parent set' (e.g. extension name),
which in this case is not Immutable.

[1] https://github.com/php/php-src/blob/master/CODING_STANDARDS#L152


 Lazare INEPOLOGLOU
 Ingénieur Logiciel



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-17 Thread Derick Rethans
On Sun, 16 Dec 2012, Lars Strojny wrote:

 Am 16.12.2012 um 13:21 schrieb Derick Rethans der...@php.net:
 
  On Tue, 11 Dec 2012, Derick Rethans wrote:
  
  On Mon, 10 Dec 2012, Herman Radtke wrote:
  
  Another option is to make an ImmutableDateTime class. The DateTime 
  class could actually be changed to inherit the ImmutableDateTime 
  class. The only extensions on the DateTime class would be the 
  mutable methods.
  
  I'm not really against that, but we do need to use the Date 
  namespace - so DateTimeImmutable. It might be trickier to do than 
  it sounds though...
  
  I've started hacking on this - with some luck I'm done before PHP 
  5.5 beta1.

 This is so cool, thanks Derick! If you need help with testing or 
 anything else, let me know.

I've just pushed it to the immutable-date branch:
http://git.php.net/?p=php-src.git;a=shortlog;h=refs/heads/immutable-date

I went for DateTimePoint. Point as in Point in time. I am not too 
happy with the name, but I think it works better than DateTimeImmutable 
as that just sounds quircky. I'm still fixing up a few things and adding 
some test cases. I think I need to make it work with DatePeriod too - 
but I haven't looked at that yet.

cheers,
Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-17 Thread Benjamin Eberlei
On Mon, Dec 17, 2012 at 5:48 PM, Derick Rethans der...@php.net wrote:

 I went for DateTimePoint. Point as in Point in time. I am not too
 happy with the name, but I think it works better than DateTimeImmutable
 as that just sounds quircky. I'm still fixing up a few things and adding
 some test cases. I think I need to make it work with DatePeriod too -
 but I haven't looked at that yet.


some suggestions:

DateTimeValue
DateTimeImmutable
DateImmutable
DateFixed
DateStatic
(and as a bonus: DateTime2)


Re: [PHP-DEV] DateTime improvement

2012-12-17 Thread Lars Strojny
Hi Derick,

I would go with DateTimeValue or DateTimeImmutable as well.

Am 17.12.2012 um 19:42 schrieb Benjamin Eberlei kont...@beberlei.de:

 On Mon, Dec 17, 2012 at 5:48 PM, Derick Rethans der...@php.net wrote:
 I went for DateTimePoint. Point as in Point in time. I am not too
 happy with the name, but I think it works better than DateTimeImmutable
 as that just sounds quircky. I'm still fixing up a few things and adding
 some test cases. I think I need to make it work with DatePeriod too -
 but I haven't looked at that yet.
  
 some suggestions:
 
 DateTimeValue
 DateTimeImmutable
 DateImmutable
 DateFixed
 DateStatic
 (and as a bonus: DateTime2)


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-17 Thread Adam Harvey
On 18 December 2012 04:52, Lars Strojny l...@strojny.net wrote:
 I would go with DateTimeValue or DateTimeImmutable as well.

+1. I'd prefer DateTimeImmutable personally because it describes what
it is better than the other options.

Adam bikeshed Harvey

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Derick Rethans
On Tue, 11 Dec 2012, Derick Rethans wrote:

 On Mon, 10 Dec 2012, Herman Radtke wrote:
 
  Another option is to make an ImmutableDateTime class. The DateTime
  class could actually be changed to inherit the ImmutableDateTime
  class. The only extensions on the DateTime class would be the mutable
  methods.
 
 I'm not really against that, but we do need to use the Date namespace - 
 so DateTimeImmutable. It might be trickier to do than it sounds 
 though...

I've started hacking on this - with some luck I'm done before PHP 5.5 
beta1.

cheers,
Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Lars Strojny
This is so cool, thanks Derick! If you need help with testing or anything else, 
let me know.

Am 16.12.2012 um 13:21 schrieb Derick Rethans der...@php.net:

 On Tue, 11 Dec 2012, Derick Rethans wrote:
 
 On Mon, 10 Dec 2012, Herman Radtke wrote:
 
 Another option is to make an ImmutableDateTime class. The DateTime
 class could actually be changed to inherit the ImmutableDateTime
 class. The only extensions on the DateTime class would be the mutable
 methods.
 
 I'm not really against that, but we do need to use the Date namespace - 
 so DateTimeImmutable. It might be trickier to do than it sounds 
 though...
 
 I've started hacking on this - with some luck I'm done before PHP 5.5 
 beta1.
 
 cheers,
 Derick
 
 -- 
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php
 


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Lester Caine

I'm not really against that, but we do need to use the Date namespace -
so DateTimeImmutable. It might be trickier to do than it sounds
though...

I've started hacking on this - with some luck I'm done before PHP 5.5
beta1.


Am I missing something here?
Isn't this just making the object content read only?
Haven't we been having a separate discussion on that?

On the whole I'm only using DateTime objects when I need to display the content 
in a different timezone, so the timezone needs to be changeable, but the base 
date is read only. Alternatively I'm building a calendar so need 'all the days 
for month x' as an array, and then use those dates to generate the database 
query. If it's a 'local' calendar then there will be a time offset incorporated 
as well.


In Firebird, the dates are stored as a numeric value, with the whole part the 
number of days, and the fraction the time of day. Two 32bit values. When doing 
comparisons there is no point converting to a DateTime object, one converts FROM 
the DateTime to parameter suitable for the database, and leave the database to 
do the filtering.


--
Lester Caine - G8HFL
-
Contact - http://lsces.co.uk/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk
Rainbow Digital Media - http://rainbowdigitalmedia.co.uk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Никита
I have actually started too, but I made it w/o inheritance from DateTime,  
and I made many of inline functions to avoid code repetition, so I don't  
know how good is it. The code on my work computer, so I can show it  
tomorrow.


Derick Rethans der...@php.net писал(а) в своём письме Sun, 16 Dec 2012  
16:21:47 +0400:



On Tue, 11 Dec 2012, Derick Rethans wrote:


On Mon, 10 Dec 2012, Herman Radtke wrote:

 Another option is to make an ImmutableDateTime class. The DateTime
 class could actually be changed to inherit the ImmutableDateTime
 class. The only extensions on the DateTime class would be the mutable
 methods.

I'm not really against that, but we do need to use the Date namespace -
so DateTimeImmutable. It might be trickier to do than it sounds
though...


I've started hacking on this - with some luck I'm done before PHP 5.5
beta1.

cheers,
Derick


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Derick Rethans
On Sun, 16 Dec 2012, Lester Caine wrote:

   I'm not really against that, but we do need to use the Date namespace -
   so DateTimeImmutable. It might be trickier to do than it sounds
   though...
   
   I've started hacking on this - with some luck I'm done before PHP 5.5
   beta1.
 
 Am I missing something here?
 Isn't this just making the object content read only?

Sortof. But as that is how things work, making an immutable variant 
isn't that easy.

 Haven't we been having a separate discussion on that?
 
 On the whole I'm only using DateTime objects when I need to display the
 content in a different timezone, so the timezone needs to be changeable, but
 the base date is read only. Alternatively I'm building a calendar so need 'all
 the days for month x' as an array, and then use those dates to generate the
 database query. If it's a 'local' calendar then there will be a time offset
 incorporated as well.

Al the methods will *still* return the modified DateTime object - it's 
just that the one that you *call* f.e. -modify() on won't change 
anymore.

cheers,
Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Stas Malyshev
Hi!

 Al the methods will *still* return the modified DateTime object - it's 
 just that the one that you *call* f.e. -modify() on won't change 
 anymore.

Doesn't it mean you can just call clone() on it in modifier methods
before doing anything else?
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-16 Thread Derick Rethans
On Sun, 16 Dec 2012, Stas Malyshev wrote:

  Al the methods will *still* return the modified DateTime object - 
  it's just that the one that you *call* f.e. -modify() on won't 
  change anymore.
 
 Doesn't it mean you can just call clone() on it in modifier methods 
 before doing anything else?

Yeah, I think so. I tried that but I got some errors. It's something for 
me to sort out. So far, I've just created all the helper methods etc. 
clone() however is not a method, but a language construct... so it's not 
that trivial.

cheers,
Derick

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Nikita Nefedov

Hi!


Date is immutable, but there's no reason why date object should be able
to represent only one date. Reference to Java is not exactly applicable
here, as many problems existing in Java (thread safety, long-living
object references, etc.) do not exist in PHP.


Say we have a blog post entity, it looks like this:
Post Object
(
[title] = Qwerty
[body] = Lorem ipsum
[craetedAt] = DateTime Object
(
[date] = 2010-10-23 00:00:00
[timezone_type] = 3
[timezone] = Europe/Moscow
)
)

Now we have some third-party service that we need to use to send our post  
somewhere, it has a method that accepts title, body and DateTime object  
when the post was created. So we pass our DateTime object to that method  
and it can do with that object whatever it wants. When our script ends, it  
tries to persist all changes to entities and this date will end up in the  
database.
Or we can watch at that problem from ORM's side - when it fetches rows and  
maps them to objects, it should remember original state of that data, so  
it can distinguish what objects need to be UPDATE-d in database in the  
end. So there's to ways for ORM to think about dates - as  
strings/timestamps (it could be database's representation of date like  
2010-10-23 or just integer with timestamp) or it could be objects of  
DateTime. More efficient and logical way would be objects, but that way  
you must aware users that they shouldn't modify values of DateTime  
objects, and instead they should create new instance when they want to  
change value of datetime type. And it's just bad that there could be  
situations when the entity will represent different data, after  
persisting, than database.



It does not - if you don't need it mutable, don't use modify() or
override modify() with method that would clone the object and return
modified clone. This can easily be done in userspace if you require an
immutable object, which most of the users actually do not.


I was speaking not about modify() but about add() and sub(). Actually I  
don't like these two methods (plus and minus) that I proposed too, but how  
can we solve this problem differently?


What about user-land implementation - there's one problem: I can't just  
extend DateTime object, because it has factory methods like  
createFromFormat, so I need to use decorator pattern and from that point  
hell begins.



Timestamp doesn't need any timelib parsing AFAIK, but YMD certainly does
- you need to calculate the actual timestamp according to current
timezone, etc.


I meant I must either call create new DateTime and pass to constructor  
timestamp string starting with @ (and there would be parsing involved) or  
call createFromFormat and pass U as second parameter and timestamp as  
first one.



DateTime objects can be compared directly, why do you think you can
compare only timestamps?


My fault, didn't know about that.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Marco Pivetta
As Nikita says, from an ORM perspective, an object is always immutable (at
least with current implementations I know of), and that's because they can
simply use the object hashes to identify two different objects.

While this may be a niche to many of you, I've encountered a quite big
amount of people just modifying their DateTime objects with the existing
API and then complaining about their date not being saved to DB.

I don't believe (at all) in if you don't need it mutable, don't use
modify() oroverride modify(). If the API is there, people will use it. We
tried to implement an immutable DateTime in userland, but it doesn't work
out well...

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Stas Malyshev
Hi!

 As Nikita says, from an ORM perspective, an object is always immutable
 (at least with current implementations I know of), and that's because
 they can simply use the object hashes to identify two different objects.

Why for ORM Date is even an object? In most databases, date is a basic
value type, and should be accepted by value, not as a complex object.
So, it should also be identified as the value - for number 1, you do not
need additional identity or hash except it being number 1, same should
be for dates.

 I don't believe (at all) in if you don't need it mutable, don't use
 modify() oroverride modify(). If the API is there, people will use it.
 We tried to implement an immutable DateTime in userland, but it doesn't
 work out well...

Why it doesn't work well and why PHP needs to be changed because of it?
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Daniel Ribeiro Gomes
People tend to desire API changes that go on the same directions they are
going.

That's nature...


Daniel Ribeiro Gomes Pereira
Twitter https://twitter.com/#!/drgomesp |
Facebookhttps://www.facebook.com/profile.php?id=10407054469
 | LinkedIn http://www.linkedin.com/pub/daniel-ribeiro-gomes/21/414/39
iPhone: +55 (48) 9111-0931



2012/12/11 Stas Malyshev smalys...@sugarcrm.com

 Hi!

  As Nikita says, from an ORM perspective, an object is always immutable
  (at least with current implementations I know of), and that's because
  they can simply use the object hashes to identify two different objects.

 Why for ORM Date is even an object? In most databases, date is a basic
 value type, and should be accepted by value, not as a complex object.
 So, it should also be identified as the value - for number 1, you do not
 need additional identity or hash except it being number 1, same should
 be for dates.

  I don't believe (at all) in if you don't need it mutable, don't use
  modify() oroverride modify(). If the API is there, people will use it.
  We tried to implement an immutable DateTime in userland, but it doesn't
  work out well...

 Why it doesn't work well and why PHP needs to be changed because of it?
 --
 Stanislav Malyshev, Software Architect
 SugarCRM: http://www.sugarcrm.com/
 (408)454-6900 ext. 227

 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Stas Malyshev
Hi!

 strings/timestamps (it could be database's representation of date like  
 2010-10-23 or just integer with timestamp) or it could be objects of  
 DateTime. More efficient and logical way would be objects, but that way  
 you must aware users that they shouldn't modify values of DateTime  
 objects, and instead they should create new instance when they want to  
 change value of datetime type. And it's just bad that there could be  
 situations when the entity will represent different data, after  
 persisting, than database.

You need not be aware of anything unless your database identifies dates
by object identities, which is usually wrong since DateTime is a value
type in most systems, and should be identified by value, as I already
noted. If your data are mutable (which I assume they are, since
otherwise the question of saving would not arise), you have to treat
changes in title, body, etc. fields - treat the changes in createdAt
field the same way.

 What about user-land implementation - there's one problem: I can't just  
 extend DateTime object, because it has factory methods like  
 createFromFormat, so I need to use decorator pattern and from that point  
 hell begins.

It is true that createFromFormat and other factory methods could use an
extension that allows to instantiate child classes, however working
around it is pretty trivial, not sure what hell begins there.

 I meant I must either call create new DateTime and pass to constructor  
 timestamp string starting with @ (and there would be parsing involved) or  
 call createFromFormat and pass U as second parameter and timestamp as  
 first one.

Yes, but what's wrong with that? It works just fine.
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Stas Malyshev
Hi!

 @Stas a DateTime object is the perfect representation of what in DB
 world has dozens of different representations. The reasoning behind it
 is exactly the same as having a DateTime object vs having a date+time
 string.

You are confusing internal PHP representation with object identity vs.
value treatment. There's no reason for dates to be treated as non-value
types having complex structure, and if you do not, mutability is not a
question.
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-11 Thread Никита
Stas Malyshev smalys...@sugarcrm.com писал(а) в своём письме Tue, 11 Dec  
2012 21:06:05 +0400:



Hi!


As Nikita says, from an ORM perspective, an object is always immutable
(at least with current implementations I know of), and that's because
they can simply use the object hashes to identify two different objects.


Why for ORM Date is even an object? In most databases, date is a basic
value type, and should be accepted by value, not as a complex object.
So, it should also be identified as the value - for number 1, you do not
need additional identity or hash except it being number 1, same should
be for dates.


Then why do we even need DateTime class? We could stay with functions. I  
think if we want to bring some OOP in php, then we need to do it right way.



I don't believe (at all) in if you don't need it mutable, don't use
modify() oroverride modify(). If the API is there, people will use it.
We tried to implement an immutable DateTime in userland, but it doesn't
work out well...


Why it doesn't work well and why PHP needs to be changed because of it?


Because of some DateTime's limitations - you will end up making brand new  
DateTime class, reimplementing *all* the features that were implemented in  
DateTime. At first - you can't just extend DateTime, because of  
factory-methods - so that way you will need to use decorator, but even  
with this approach (pretty shitty approach I must say) there would be  
problems with diff() method (if you want to use DateTime's diff, you will  
need to implement getDateTime method of your own DateTime class (because  
diff accepts DateTime), so you will end with mutable object again, because  
one can just execute $yourDate-getDateTime()-modify(*whatever you  
want*)).


I think it should be changed (or implemented another one, like someone  
said, DateTimeImmutable) because date is atomic value.


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-DEV] DateTime improvement

2012-12-10 Thread Nikita Nefedov
So there had been at least two or three messages (subjects) about DateTime  
object and everytime there was this problem - people tend to take DateTime  
object as mutable object and it really is.
As long as we know, it's not so good - date is immutable by nature. I  
don't want to write here why it's so, I will just throw this link:  
http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html


I don't want to change any existing functionality, because some people  
already use it, but I just wanted to point out that current DateTime class  
is forcing people to think about it as mutable.
My main concerns are DateTime#add() and DateTime#sub(). The problem is -  
they both change current object and return it.
I think we could add methods to DateTime like add() and sub(), let's say  
plus() and minus(), but they would behave differently in the way that they  
would return new DateTime objects and won't change current object.


Here's gist to make it clear: https://gist.github.com/4250785

Also, there's methods compareTo, createFromTimestamp and createFromDay, it  
could be another proposal. I think we are very often create DateTime  
objects just from timestamp or year-month-day. So we could introduce this  
methods that could not rely on timelib's parsing, and instead just take  
numbers directly.
And I think DateTime lack comparing method. For now I can compare DateTime  
objects only by getting their timestamps, but I though that the idea of  
DateTime was to go away from using timestamps and instead use well thought  
out api.
Anyway, I think this three methods should be considered as another  
proposal (because they are solve different problems).


Even if this proposal doesn't go far, I think we should do something with  
DateTime. I think I'm going to create user-land library for dealing with  
some of this problems.

But if it pass, I will make patch.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-10 Thread Ángel González
On 10/12/12 16:18, Nikita Nefedov wrote:
 So there had been at least two or three messages (subjects) about
 DateTime object and everytime there was this problem - people tend to
 take DateTime object as mutable object and it really is.
 As long as we know, it's not so good - date is immutable by nature. I
 don't want to write here why it's so, I will just throw this link:
 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html

 I don't want to change any existing functionality, because some people
 already use it, but I just wanted to point out that current DateTime
 class is forcing people to think about it as mutable.
 My main concerns are DateTime#add() and DateTime#sub(). The problem is
 - they both change current object and return it.
 I think we could add methods to DateTime like add() and sub(), let's
 say plus() and minus(), but they would behave differently in the way
 that they would return new DateTime objects and won't change current
 object.
That will make it even more inconsistent.
You have add() and plus() but one changes the object and the other doesn't.

If we were going to rewrite php or the DateTime class, it could be a
good idea to make those methods  (or its equivalents) not modify the object.
But I don't think it'd be a win to do such thing now.


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-10 Thread Herman Radtke
On Mon, Dec 10, 2012 at 11:39 AM, Ángel González keis...@gmail.com wrote:
 On 10/12/12 16:18, Nikita Nefedov wrote:
 So there had been at least two or three messages (subjects) about
 DateTime object and everytime there was this problem - people tend to
 take DateTime object as mutable object and it really is.
 As long as we know, it's not so good - date is immutable by nature. I
 don't want to write here why it's so, I will just throw this link:
 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html

 I don't want to change any existing functionality, because some people
 already use it, but I just wanted to point out that current DateTime
 class is forcing people to think about it as mutable.
 My main concerns are DateTime#add() and DateTime#sub(). The problem is
 - they both change current object and return it.
 I think we could add methods to DateTime like add() and sub(), let's
 say plus() and minus(), but they would behave differently in the way
 that they would return new DateTime objects and won't change current
 object.
 That will make it even more inconsistent.
 You have add() and plus() but one changes the object and the other doesn't.

 If we were going to rewrite php or the DateTime class, it could be a
 good idea to make those methods  (or its equivalents) not modify the object.
 But I don't think it'd be a win to do such thing now.


Another option is to make an ImmutableDateTime class. The DateTime
class could actually be changed to inherit the ImmutableDateTime
class. The only extensions on the DateTime class would be the mutable
methods.


-- 
Herman Radtke
hermanrad...@gmail.com | http://hermanradtke.com

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-10 Thread David Muir

On 11/12/12 06:59, Herman Radtke wrote:

On Mon, Dec 10, 2012 at 11:39 AM, Ángel González keis...@gmail.com wrote:

On 10/12/12 16:18, Nikita Nefedov wrote:

So there had been at least two or three messages (subjects) about
DateTime object and everytime there was this problem - people tend to
take DateTime object as mutable object and it really is.
As long as we know, it's not so good - date is immutable by nature. I
don't want to write here why it's so, I will just throw this link:
http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html

I don't want to change any existing functionality, because some people
already use it, but I just wanted to point out that current DateTime
class is forcing people to think about it as mutable.
My main concerns are DateTime#add() and DateTime#sub(). The problem is
- they both change current object and return it.
I think we could add methods to DateTime like add() and sub(), let's
say plus() and minus(), but they would behave differently in the way
that they would return new DateTime objects and won't change current
object.

That will make it even more inconsistent.
You have add() and plus() but one changes the object and the other doesn't.

If we were going to rewrite php or the DateTime class, it could be a
good idea to make those methods  (or its equivalents) not modify the object.
But I don't think it'd be a win to do such thing now.


Another option is to make an ImmutableDateTime class. The DateTime
class could actually be changed to inherit the ImmutableDateTime
class. The only extensions on the DateTime class would be the mutable
methods.




Would love to see ImmutableDateTime!

David

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-10 Thread Stas Malyshev
Hi!

 As long as we know, it's not so good - date is immutable by nature. I  
 don't want to write here why it's so, I will just throw this link:  
 http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html

Date is immutable, but there's no reason why date object should be able
to represent only one date. Reference to Java is not exactly applicable
here, as many problems existing in Java (thread safety, long-living
object references, etc.) do not exist in PHP.

 I don't want to change any existing functionality, because some people  
 already use it, but I just wanted to point out that current DateTime class  
 is forcing people to think about it as mutable.

It does not - if you don't need it mutable, don't use modify() or
override modify() with method that would clone the object and return
modified clone. This can easily be done in userspace if you require an
immutable object, which most of the users actually do not.

 Also, there's methods compareTo, createFromTimestamp and createFromDay, it  
 could be another proposal. I think we are very often create DateTime  
 objects just from timestamp or year-month-day. So we could introduce this  
 methods that could not rely on timelib's parsing, and instead just take  
 numbers directly.

Timestamp doesn't need any timelib parsing AFAIK, but YMD certainly does
- you need to calculate the actual timestamp according to current
timezone, etc.

 And I think DateTime lack comparing method. For now I can compare DateTime  
 objects only by getting their timestamps, but I though that the idea of  

DateTime objects can be compared directly, why do you think you can
compare only timestamps?
-- 
Stanislav Malyshev, Software Architect
SugarCRM: http://www.sugarcrm.com/
(408)454-6900 ext. 227

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] DateTime improvement

2012-12-10 Thread Derick Rethans
On Mon, 10 Dec 2012, Herman Radtke wrote:

 On Mon, Dec 10, 2012 at 11:39 AM, Ángel González keis...@gmail.com wrote:
  On 10/12/12 16:18, Nikita Nefedov wrote:
  So there had been at least two or three messages (subjects) about
  DateTime object and everytime there was this problem - people tend to
  take DateTime object as mutable object and it really is.
  As long as we know, it's not so good - date is immutable by nature. I
  don't want to write here why it's so, I will just throw this link:
  http://www.ibm.com/developerworks/java/library/j-jtp02183/index.html
 
  I don't want to change any existing functionality, because some people
  already use it, but I just wanted to point out that current DateTime
  class is forcing people to think about it as mutable.
  My main concerns are DateTime#add() and DateTime#sub(). The problem is
  - they both change current object and return it.
  I think we could add methods to DateTime like add() and sub(), let's
  say plus() and minus(), but they would behave differently in the way
  that they would return new DateTime objects and won't change current
  object.
  That will make it even more inconsistent.

Yes, that's horrible - and might not even work with the current design.

  You have add() and plus() but one changes the object and the other doesn't.
 
  If we were going to rewrite php or the DateTime class, it could be a
  good idea to make those methods  (or its equivalents) not modify the object.
  But I don't think it'd be a win to do such thing now.
 
 
 Another option is to make an ImmutableDateTime class. The DateTime
 class could actually be changed to inherit the ImmutableDateTime
 class. The only extensions on the DateTime class would be the mutable
 methods.

I'm not really against that, but we do need to use the Date namespace - 
so DateTimeImmutable. It might be trickier to do than it sounds 
though...

cheers,
Derick

-- 
http://derickrethans.nl | http://xdebug.org
Like Xdebug? Consider a donation: http://xdebug.org/donate.php
twitter: @derickr and @xdebug
Posted with an email client that doesn't mangle email: alpine
-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php