php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #49188 DateTime::__construct should allow a DateTime-object to be passed as argument
Submitted: 2009-08-07 08:18 UTC Modified: 2017-01-11 17:17 UTC
Votes:7
Avg. Score:3.6 ± 1.7
Reproduced:5 of 6 (83.3%)
Same Version:2 (40.0%)
Same OS:2 (40.0%)
From: niklas at narhinen dot net Assigned:
Status: Not a bug Package: Date/time related
PHP Version: 5.2.10 OS:
Private report: No CVE-ID: None
 [2009-08-07 08:18 UTC] niklas at narhinen dot net
Description:
------------
DateTime::__construct should allow a DateTime object to be passed as parameter to emulate good object desing (Copy constructor).

This wouldn't break anything.

Reproduce code:
---------------
<?php
date_default_timezone_set('Europe/Helsinki');

class MyClass
{
	private $myDateTime;
	public function setTime($datetime = null) { $this->myDateTime = new DateTime($datetime); }
	public function getTime($format = "Y-m-d") { return $this->myDateTime->format($format); }
}

$class = new MyClass();
$class->setTime("7.8.2009");
var_dump($class->getTime());
$class->setTime(null);
var_dump($class->getTime());
$dt = new DateTime('15.5.2005');
$class->setTime($dt);
var_dump($class->getTime());
?>

Expected result:
----------------
string(10) "2009-08-07"
string(10) "2009-08-07"
string(10) "2005-05-15"

Actual result:
--------------
string(10) "2009-08-07"
string(10) "2009-08-07"
PHP Fatal error:  Uncaught exception 'Exception' with message 'DateTime::__construct() expects parameter 1 to be string, object gi
ven' in D:\temp\php\datetime.php:7
Stack trace:
#0 D:\temp\php\datetime.php(7): DateTime->__construct(Object(DateTime))
#1 D:\temp\php\datetime.php(17): MyClass->setTime(Object(DateTime))
#2 {main}
  thrown in D:\temp\php\datetime.php on line 7

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-11-24 15:15 UTC] jani@php.net
-Package: Feature/Change Request +Package: Date/time related
 [2012-12-04 20:16 UTC] will dot sskates at ntlworld dot com
You can pass the time string instead. What is the use case for this?
 [2016-06-20 16:12 UTC] cmb@php.net
> DateTime::__construct should allow a DateTime object to be
> passed as parameter to emulate good object desing (Copy
> constructor).

PHP has `clone` for this purpose. In my opinion, that's pretty
fine.
 [2017-01-11 17:17 UTC] heiglandreas@php.net
-Status: Open +Status: Not a bug
 [2017-01-11 17:17 UTC] heiglandreas@php.net
As this issue is by now over 7 years old, targets an unsupported version of PHP and can be circumvented in several ways I'm closing this.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Dec 03 18:01:30 2024 UTC