IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP 8.2.0 - Creation of dynamic property is deprecated


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 205
    Par défaut PHP 8.2.0 - Creation of dynamic property is deprecated
    Bonjour,

    En faisant évoluer mon PHP local de la version 7.4.33 vers 8.2.0, j'ai à présent de multiple erreurs.
    Deprecated: Creation of dynamic property parametres_2::$insert is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 6

    Deprecated: Creation of dynamic property parametres_2::$historiser is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 9

    Deprecated: Creation of dynamic property parametres_2::$update is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 12

    Deprecated: Creation of dynamic property parametres_2::$selectAll is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 21

    Deprecated: Creation of dynamic property parametres_2::$selectOne is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 22

    Deprecated: Creation of dynamic property parametres_2::$List_Historique is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 23

    Deprecated: Creation of dynamic property parametres_2::$selectByCode is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 24

    Deprecated: Creation of dynamic property parametres_2::$selectOneCode is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 25

    Deprecated: Creation of dynamic property parametres_2::$ListCodes is deprecated in /Users/eddy/Library/Mobile Documents/com~apple~CloudDocs/php_dev/SCF/classes/class_parametres_2.php on line 26
    Comment puis-je faire évoluer mon code ?

    Voici ma classe :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    <?php
    	class parametres_2
    	{
    		public function __construct($db)
    		{
    		    $this-> insert = $db->prepare("insert into scf_parametres_2
    					(Param1, Param2, Param3, Libelle_Param, Valeur, idCrea, TS_Crea)
    			 values (:Param1, :Param2, :Param3, :Libelle_Param, :Valeur, :idCrea, current_timestamp)");
    		    $this-> historiser = $db->prepare("insert into scf_parametres_2_hist 
                        select current_timestamp, :idHist, Param1, Param2, Param3, Libelle_Param, Valeur, idCrea, TS_Crea, idModif, TS_Modif 
                                from scf_parametres_2 where Param1 = :Param1 and Param2 = :Param2 and Param3 = :Param3");
    		    $this->update = $db->prepare(
    					"update scf_parametres_2 
    						set Libelle_Param = :Libelle_Param
    						  , Valeur = :Valeur
    						  , idModif = :idModif
    						  , TS_Modif = current_timestamp
    					  where Param1 = :Param1
    						and Param2 = :Param2
    						and Param3 = :Param3");
    			$this-> selectAll = $db->prepare("select * from scf_parametres_2 order by Param1, Param2, Param3");
    			$this-> selectOne = $db->prepare("select * from scf_parametres_2 where Param1 = :Param1 and Param2 = :Param2 and Param3 = :Param3");
    			$this-> List_Historique = $db->prepare("select * from scf_parametres_2_hist where Param1 = :Param1 and Param2 = :Param2 and Param3 = :Param3 order by TS_Hist desc");
    			$this-> selectByCode = $db->prepare("select * from scf_parametres_2 where Param1 = :Param1 order by Param2, Param3");
    			$this-> selectOneCode = $db->prepare("select * from scf_parametres_2 where Param1 = :Param1 order by Param2, Param3");
    			$this-> ListCodes = $db->prepare("select distinct Param1 from scf_parametres_2");
    		}
     
    		public function insert($Param1, $Param2, $Param3, $Libelle_Param, $Valeur)
    		{
    			try {
    				$this -> insert -> execute(array(':Param1' => $Param1, ':Param2' => $Param2, ':Param3' => $Param3, 
    						':Libelle_Param' => $Libelle_Param, ':Valeur' => $Valeur, ':idCrea' => $_SESSION['idLicencie']));
    				return $this->insert->rowCount();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.insert : $Param1, $Param2, $Param3, $Libelle_Param, $Valeur<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
     
    		public function historiser($idHist, $Param1, $Param2, $Param3)
    		{
    		    try {
    		        $this -> historiser-> execute(array(':idHist' => $idHist, ':Param1' => $Param1, ':Param2' => $Param2, ':Param3' => $Param3));
    		        return $this->historiser->rowCount();
    		    }
    		    catch (PDOException $e)	{
    		        echo "<h1 id='msgerreur'>Erreur dans class_parametre.historiser : $Param1, $Param2, $Param3<br/></h1>";
    		        die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    		    }
    		}
     
    		public function update($Param1, $Param2, $Param3, $Libelle_Param, $Valeur)
    		{
    			try {
    				$this -> update-> execute(array(':Param1' => $Param1, ':Param2' => $Param2, ':Param3' => $Param3, 
    						':Libelle_Param' => $Libelle_Param, ':Valeur' => $Valeur, ':idModif' => $_SESSION['idLicencie']));
    				return $this->update->rowCount();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.update : $Param1, $Param2, $Param3, $Libelle_Param, $Valeur<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
     
    		public function selectAll()
    		{
    		    try {
    		        $this -> selectAll -> execute();
    		        return $this->selectAll->fetchAll();
    		    }
    		    catch (PDOException $e)	{
    		        echo "<h1 id='msgerreur'>Erreur dans class_parametre.selectAll<br/></h1>";
    		        die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    		    }
    		}
     
    		public function List_Historique($Param1, $Param2, $Param3)
    		{
    		    try {
    		        $this -> List_Historique -> execute(array(':Param1' => $Param1, ':Param2' => $Param2, ':Param3' => $Param3));
    		        return $this->List_Historique->fetchAll();
    		    }
    		    catch (PDOException $e)	{
    		        echo "<h1 id='msgerreur'>Erreur dans class_parametre.List_Historique($Param1, $Param2, $Param3)<br/></h1>";
    		        die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    		    }
    		}
     
    		public function selectOne($Param1, $Param2, $Param3)
    		{
    			try {
    				$this -> selectOne-> execute(array(':Param1' => $Param1, ':Param2' => $Param2, ':Param3' => $Param3));
    				return $this->selectOne->fetch();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.selectOne : $Param1, $Param2, $Param3<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
     
    		public function selectByCode($Param1)
    		{
    			try {
    				$this -> selectByCode -> execute(array(':Param1' => $Param1));
    				return $this->selectByCode->fetchAll();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.selectOne : $Param1, $Param2, $Param3<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
     
    		public function selectOneCode($Param1)
    		{
    			try {
    				$this -> selectOneCode -> execute(array(':Param1' => $Param1));
    				return $this->selectOneCode->fetch();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.selectOneCode : $Param1<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
     
    		public function ListCodes()
    		{
    			try {
    				$this -> ListCodes -> execute();
    				return $this->ListCodes->fetchAll();
    			}
    			catch (PDOException $e)	{
    				echo "<h1 id='msgerreur'>Erreur dans class_parametre.ListCodes<br/></h1>";
    				die('<br><strong>Erreur : ' . $e->getMessage()) . "</strong></h4>";
    			}
    		}
    	}
    ?>
    Merci pour votre aide.

    Eddy

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 741
    Par défaut
    Hello,

    Depuis PHP 8.2, il n’est plus permis de créer dynamiquement une propriété sur un objet lorsqu’elle n’est pas déclarée au préalable dans la classe : il faut donc définir explicitement toutes les propriétés dans la classe, sinon un avertissement (« deprecated ») apparaîtra à chaque tentative d’affectation dynamique.

    Pour corriger ce problème :

    Énumérez toutes les propriétés utilisées dans votre constructeur (et autres méthodes) directement dans la déclaration de votre classe.

    Par exemple, ajoutez la définition de chaque propriété comme ceci juste après l’ouverture de la classe :

    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
    class parametres_2
    {
        public $insert;
        public $historiser;
        public $update;
        public $selectAll;
        public $selectOne;
        public $List_Historique;
        public $selectByCode;
        public $selectOneCode;
        public $ListCodes;
     
        public function __construct($db)
        { /* ... */ }
        // ...
    }
    Toutes les propriétés que vous utilisez dans le constructeur et dans les méthodes sont maintenant fixées comme membres de la classe.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 205
    Par défaut
    Merci d'avoir pris le temps de répondre.
    Effectivement, il va falloir que je retravaille tout mon code.

    Mais, quelle serait l'alternative à : Function strftime() is deprecated
    $J_Moins_11Mois = strftime("%Y%m%d", mktime(0, 0, 0, date('m')-11, date('d'), date('Y')));

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 741
    Par défaut
    Attention : strftime() est dépréciée

    La fonction strftime() (et %e, %P, etc.) est dépréciée à partir de PHP 8.1 et supprimée complètement en PHP 8.4.
    Dès PHP 8.2, elle déclenche un deprecation warning, ce qui explique vos multiples erreurs.

    Solution recommandée (DateTime + format)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Remplacez complètement votre ligne par ceci :
    $J_Moins_11Mois = (new DateTime())->modify('-11 months')->format('Ymd');

    C’est la méthode la plus simple, la plus lisible et 100 % compatible PHP 8.2/8.3/8.4.

    Autres variantes équivalentes (au cas où vous préfériez)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Variante 2 : DateTimeImmutable (préférable si vous ne voulez pas modifier l'objet)
    $J_Moins_11Mois = (new DateTimeImmutable())->modify('-11 months')->format('Ymd');
     
    // Variante 3 : avec date() et strtotime() (toujours fonctionnel)
    $J_Moins_11Mois = date('Ymd', strtotime('-11 months'));
     
    // Variante 4 : si vous voulez garder mktime() (moins lisible mais fonctionne)
    $J_Moins_11Mois = date('Ymd', mktime(0, 0, 0, date('m')-11, date('d'), date('Y')));

    La fonction date() seule n’est pas dépréciée, c’est uniquement strftime() qui pose problème.

    Remplacement global dans votre projet

    Si vous avez beaucoup de strftime() dans votre code, vous pouvez faire une recherche/remplacement rapide :

    Recherche :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    strftime("%Y%m%d",
    strftime('%d/%m/%Y',
    strftime('%Y-%m-%d',

    Remplacez par les équivalents avec date() ou DateTime :

    Ancien strftime Nouvelle écriture recommandée
    strftime("%Y%m%d", $ts) date('Ymd', $ts) ou (new DateTime("@$ts"))->format('Ymd')
    strftime("%d/%m/%Y", $ts) date('d/m/Y', $ts)
    strftime("%Y-%m-%d", $ts) date('Y-m-d', $ts)
    strftime("%d %B %Y", $ts) (new DateTime("@$ts"))->format('d F Y') (attention aux locales)

    Bonus : gestion des locales

    strftime() gérait automatiquement la locale, mais date() et DateTime::format() non.
    Si vous aviez par exemple :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setlocale(LC_TIME, 'fr_FR.UTF-8');
    echo strftime("%d %B %Y"); // → 01 décembre 2025

    Vous devrez passer par IntlDateFormatter en PHP 8+ :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE);
    echo $formatter->format(new DateTime()); // → 1 décembre 2025

    Résumé

    Pour votre ligne précise, remplacez simplement par :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $J_Moins_11Mois = (new DateTime())->modify('-11 months')->format('Ymd');
    // ou la version ultra-courte :
    $J_Moins_11Mois = date('Ymd', strtotime('-11 months'));

    Et toutes vos erreurs strftime() is deprecated disparaîtront normalement...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre confirmé
    Homme Profil pro
    Cobol sur Mainframe et Unix AIX
    Inscrit en
    Mars 2012
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cobol sur Mainframe et Unix AIX

    Informations forums :
    Inscription : Mars 2012
    Messages : 205
    Par défaut
    ouah, super bien détaillé.
    MERCI

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/07/2023, 12h22
  2. PDOStatement - Deprecated: Creation of dynamic property Article::$id
    Par scamphp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2023, 10h35
  3. Dynamic properties task
    Par Ravager62 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2007, 10h06
  4. PHP et MYSQL pour création et modification
    Par guillaumeIOB dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 03/05/2006, 19h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo