Bonjour,

je me bats avec ce message d'erreur :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 php : Sélectionner tout - Visualiser dans une fenêtre à part
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 php : Sélectionner tout - Visualiser dans une fenêtre à part
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 php : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}