PHP 8.2 Deprecated: Creation of dynamic property

Petit nouveau ! | 5 Messages

02 janv. 2025, 14:09

Bonjour,
J'ai depuis la mise à jour vers PHP 8.2 un message d'erreur sur un blog "Deprecated: Creation of dynamic property ORM\Blog\Entity\Blog::$0 is deprecated in E:\laragon\www\jd-web-design-version2\site\OCFram\Hydrator.php on line 9"

Je sais que cela vient de la mise à jour PHP 8 qui souhaite supprimer les propriétés dynamiques. Je sais également que l'on peut désactiver le message d'erreur en ajoutant "#[\AllowDynamicProperties]" à la classe en question mais je souhaiterais écrire mon code proprement. Je ne sais pas comment m'y prendre, une idée ?

Merci d'avance.

Ma classe "Blog" :
<?php
namespace ORM\Blog\Entity;
use OCFram\Hydrator;

//#[\AllowDynamicProperties]
class Blog {

	use Hydrator;
	private $id;
	private $titre;
	private $image;
	private $contenu;
	private $date;
	private $extrait;
	private $slug;

	public function __construct(Array $datas){
		$this->hydrate($datas);
	}

	//TOUS LES GETTERS
	public function getId(){
		return $this->id;
	}
	public function getTitre(){
		return $this->titre;
	}
	public function getImage(){
		return $this->image;
	}
	public function getContenu(){
		return $this->contenu;
	}
	public function getDate(){
		return $this->date;
	}
	public function getExtrait(){
		return $this->extrait;
	}
	public function getSlug(){
		return $this->slug;
	}
	
	
	//TOUS LES SETTERS SAUF SUR CELUI POUR id_photo
	public function setTitre($val){
		$this->titre = $val;
	}
	public function setImage($val){
		$this->image = $val;
	}
	public function setContenu($val){
		$this->contenu = $val;
	}
	public function setDate($val){
		$this->date = $val;
	}
	public function setExtrait($val){
		$this->extrait = $val;
	}
	public function setSlug($val){
		$this->slug = $val;
	}
}
?>
Ma classe Hydrator :
<?php
namespace OCFram;

trait Hydrator {
	function hydrate(Array $array){
		foreach ($array as $key => $value) {
			$this->$key = $value;
		}
	}
}

?>

Avatar du membre
Mammouth du PHP | 1609 Messages

06 janv. 2025, 16:38

Salut, le tableau passé à la méthode hydrate est-il bien indexé sur les noms des propriétés ?
Parce qu'avec le Blog::$0 dans le message d'erreur j'ai un doute.

Tu pourrais éventuellement ajouter un test de contrôle avec property_exists pour lever une exception si elle n'existe pas mais cela pourrait alourdir la charge s'il y a beaucoup d'objets à hydrater.
Développeur web depuis + de 20 ans