Objet de type DateTime mal initialisé
Bonjour,
je me bats avec ce message d'erreur :
Citation:
Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in C:\wamp64\www\ticket2\Classes\Olivier\Ticket.php on line 96
Voici comment est construit cet objet : je reçois une date ayant ce format : yyyy-mm-dd. Comme je veux vérifier le format de la date, j'ai crée pour cela une classe DateTimeCtrl qui hérite de la classe DateTime et à laquelle j'ai rajouté une méthode isValid :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
<?php
declare(strict_types=1);
namespace Classes\Olivier;
use DateTime;
class DateTimeCtrl extends DateTime
{
private $date; // Datetime and format : yyyy-mm-dd
/* Constructor */
public function __construct($date)
{
$this->date=$date;
}
public function isValid():bool
{
function validateDate($date_to_control, $date, $format = 'Y-m-d')
{
$date_good_format = DateTime::createFromFormat('Y-m-d', $date_to_control);
return $date_good_format->format($format) == $date;
}
$ctrl_date=new DateTime($this->date);
return (!empty($this->date)&&validateDate($this->date,$ctrl_date));
} //end of isValid
} //end class DatetimeCtrl |
Cette variable est ensuite transmise à une autre classe ainsi :
Code:
1 2 3 4 5 6
|
$submitted_date = new DateTimeCtrl('2018-12-26');
echo "valid_date:".($submitted_date->isValid())?TRUE:FALSE."<br/>";
$last_resolved_date = new DateTime('2019-01-17');
$tic1=new Ticket(1,'Phenix','PHENIX_WW_L3',$submitted_date,$last_resolved_date,'AR // Florida // Phenix // User unable to complete...',$priori1,$status1,$country2,$user1,$user2,$orga1,$inc_typ1,$rep_source1);
$tic1->getAllData(); |
La méthode getAllData de Ticket fait appel à une autre méthode de Ticket : self::getSubmittedDateValue :
Code:
1 2 3 4 5
|
public function getSubmittedDateValue():string
{
return(($this->submitted_date)->format('Y-m-d'));
} |
et le message d'erreur de ci-dessus porte sur la ligne 4 de cette méthode. Quelle peut être la raison ?
A noter que je n'ai pas d'erreur si dans mon code, je remets le type DateTime à la place de DateTimeCtrl.
Constructeur de Ticket :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public function __construct(int $id,string $prd_name,string $assigned_grp,DateTimeCtrl $subm_date,Datetime $lr_date,string $summary,
Priority $priority,Status $status,Country $country,User $submitter,User $customer,Organization $orga,IncidentType $inc_type,
ReportedSource $rep_source)
{
$this->id=$id;
$this->product_name=$prd_name;
$this->assigned_group=$assigned_grp;
$this->submitted_date=$subm_date;
$this->last_resolved_date=$lr_date;
$this->summary=$summary;
$this->priority=$priority;
$this->status=$status;
$this->country=$country;
$this->submitter=$submitter;
$this->customer=$customer;
$this->organization=$orga;
$this->incident_type=$inc_type;
$this->reported_source=$rep_source;
} |