Re: com php-src: Added DateTimeImmutable::createFromMutable.: NEWS ext/date/php_date.c ext/date/php_date.h
ext/date/tests/DateTimeImmutable_createFromMutable.phpt
| From: | Ferenc Kovacs | Date: | Mon, 03 Mar 2014 07:35:24 +0000 |
| Subject: | Re: com php-src: Added DateTimeImmutable::createFromMutable.: NEWS ext/date/php_date.c ext/date/php_date.h ext/date/tests/DateTimeImmutable_createFromMutable.phpt |
||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-76316@lists.php.net to get a copy of this message | ||
2014.03.02. 20:19, "Derick Rethans" <derick@php.net> ezt írta:
>
> Commit: 574f230d3c7076d034422c448fd58810b9b8a488
> Author: Derick Rethans <github@derickrethans.nl> Sun, 2 Mar
2014 14:17:16 -0500
> Parents: b8d75cc464e9f0ea69d4b03b453cc361bd5eae79
> Branches: PHP-5.6 master
>
> Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=574f230d3c7076d034422c448fd58810b9b8a488
>
> Log:
> Added DateTimeImmutable::createFromMutable.
>
> Changed paths:
> M NEWS
> M ext/date/php_date.c
> M ext/date/php_date.h
> A ext/date/tests/DateTimeImmutable_createFromMutable.phpt
>
>
> Diff:
> diff --git a/NEWS b/NEWS
> index cbd2247..f82f69e 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -9,6 +9,10 @@ PHP
NEWS
> . Fixed bug #66109 (Can't reset CURLOPT_CUSTOMREQUEST to default
behaviour)
> (Tjerk)
>
> +- Date:
> + . Added DateTimeImmutable::createFromMutable to create a
DateTimeImmutable
> + object from an existing DateTime (mutable) object (Derick)
> +
> - Mail:
> . Fixed bug #66535 (Don't add newline after X-PHP-Originating-Script)
(Tjerk)
>
> diff --git a/ext/date/php_date.c b/ext/date/php_date.c
> index f6b12bc..5852bb2 100644
> --- a/ext/date/php_date.c
> +++ b/ext/date/php_date.c
> @@ -299,6 +299,10 @@ ZEND_END_ARG_INFO()
> ZEND_BEGIN_ARG_INFO(arginfo_date_method_timestamp_get, 0)
> ZEND_END_ARG_INFO()
>
> +ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from_mutable, 0, 0, 1)
> + ZEND_ARG_INFO(0, DateTime)
> +ZEND_END_ARG_INFO()
> +
> ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_open, 0, 0, 1)
> ZEND_ARG_INFO(0, timezone)
> ZEND_END_ARG_INFO()
> @@ -495,6 +499,7 @@ const zend_function_entry date_funcs_immutable[] = {
> PHP_ME(DateTimeImmutable, setDate,
arginfo_date_method_date_set, 0)
> PHP_ME(DateTimeImmutable, setISODate,
arginfo_date_method_isodate_set, 0)
> PHP_ME(DateTimeImmutable, setTimestamp,
arginfo_date_method_timestamp_set, 0)
> + PHP_ME(DateTimeImmutable, createFromMutable,
arginfo_date_method_create_from_mutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
> PHP_FE_END
> };
>
> @@ -2748,6 +2753,34 @@ PHP_METHOD(DateTimeImmutable, __construct)
> }
> /* }}} */
>
> +/* {{{ proto DateTimeImmutable::createFromMutable(DateTimeZone object)
> + Creates new DateTimeImmutable object from an existing mutable
DateTime object.
> +*/
> +PHP_METHOD(DateTimeImmutable, createFromMutable)
> +{
> + zval *datetime_object = NULL;
> + php_date_obj *new_obj = NULL;
> + php_date_obj *old_obj = NULL;
> +
> + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!",
&datetime_object, date_ce_date) == FAILURE) {
> + return;
> + }
> +
> + php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC);
> + old_obj = (php_date_obj *)
zend_object_store_get_object(datetime_object TSRMLS_CC);
> + new_obj = (php_date_obj *)
zend_object_store_get_object(return_value TSRMLS_CC);
> +
> + new_obj->time = timelib_time_ctor();
> + *new_obj->time = *old_obj->time;
> + if (old_obj->time->tz_abbr) {
> + new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr);
> + }
> + if (old_obj->time->tz_info) {
> + new_obj->time->tz_info = old_obj->time->tz_info;
> + }
> +}
> +/* }}} */
> +
> static int php_date_initialize_from_hash(zval **return_value,
php_date_obj **dateobj, HashTable *myht TSRMLS_DC)
> {
> zval **z_date = NULL;
> diff --git a/ext/date/php_date.h b/ext/date/php_date.h
> index d7343e0..2b3ae4d 100644
> --- a/ext/date/php_date.h
> +++ b/ext/date/php_date.h
> @@ -82,6 +82,7 @@ PHP_METHOD(DateTimeImmutable, setTime);
> PHP_METHOD(DateTimeImmutable, setDate);
> PHP_METHOD(DateTimeImmutable, setISODate);
> PHP_METHOD(DateTimeImmutable, setTimestamp);
> +PHP_METHOD(DateTimeImmutable, createFromMutable);
>
> PHP_METHOD(DateTimeZone, __construct);
> PHP_METHOD(DateTimeZone, __wakeup);
> diff --git a/ext/date/tests/DateTimeImmutable_createFromMutable.phpt
b/ext/date/tests/DateTimeImmutable_createFromMutable.phpt
> new file mode 100644
> index 0000000..f1d3caa
> --- /dev/null
> +++ b/ext/date/tests/DateTimeImmutable_createFromMutable.phpt
> @@ -0,0 +1,26 @@
> +--TEST--
> +Tests for DateTimeImmutable::createFromMutable.
> +--INI--
> +date.timezone=Europe/London
> +--FILE--
> +<?php
> +$current = "2014-03-02 16:24:08";
> +
> +$i = DateTimeImmutable::createFromMutable( date_create( $current ) );
> +var_dump( $i );
> +
> +$i = DateTimeImmutable::createFromMutable( date_create_immutable(
$current ) );
> +var_dump( $i );
> +?>
> +--EXPECTF--
> +object(DateTimeImmutable)#%d (3) {
> + ["date"]=>
> + string(19) "2014-03-02 16:24:08"
> + ["timezone_type"]=>
> + int(3)
> + ["timezone"]=>
> + string(13) "Europe/London"
> +}
> +
> +Warning: DateTimeImmutable::createFromMutable() expects parameter 1 to
be DateTime, object given in
%stests/DateTimeImmutable_createFromMutable.php on line %d
> +NULL
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
Hi Derick,
could you also update UPGRADING?
thanks!