Deprecated: Creation of dynamic property

Par Wilnbsi, il y a 3 ans


Bonjour , j'ai repris un tuto de grafikart en php mais je suis bloque au niveau du message afficher sur titre, j'ai beau utiliser #[AllowDynamicProperties] mais le message s'affiche toujours

<?php class Router { /** * Permet de parser une url * @param $url Url a parser * @return Tableau contenant les parametres **/ /*static function parse($url, $request) { $url = trim($url, '/'); $params = explode('/', $url); $request = array ( 'controller' => $params[0], 'action' => isset($params[1]) ? $params[1] : 'index' ); $request['params'] = array_slice($params, 2); return true; }*/ public static function parse($url, $request) { $url = trim($url, '/'); $params = explode('/', $url); $request->controller = $params[0]; $request->action = isset($params[1]) ? $params[1] : 'index'; $request->params = array_slice($params, 2); return true; } } <?php class Dispatcher { var $request; function __construct() { $this->request = new Request(); Router::parse($this->request->url, $this->request); print_r($this->request); } }

Ce que je veux

comment faire diparaitre message, car je pense que la version de 8.2 ne le permet pas et je ne peux non plus desactiver le error_reporting

5 réponses

Glioburd, il y a 3 ans

Hello, à quel niveau tu as ce message dans le code ?
Ca vient probablement de ta class Request, il faudrait que tu nous la montre :)

Tu fais un new Request(), sa propriété url existe t-elle ? A t-elle une valeur par défaut ? Si non, là tu met un argument null au niveau de

Router::parse($this->request->url, $this->request);

Ta classe Request a bien une propriété controller, action et params ?

Aussi, prend la bonne habitude de typer tes propriétés, les paramètres des méthodes et fonctions, ainsi que leur valeur de retour, genre :

class Foo { private int $bar = 0; public function getBar(): int { return $this->bar; } public function getBarWithCustomMessage(string $message): string { return "$message : $this->bar"; } }

Ca évite des mauvaises surprise + tard !

Wilnbsi, il y a 3 ans

Voici ma classe Request

<?php class Request { public $url; // URL appelle par l'utilisateur function __construct() { $this->url = $_SERVER['PHP_SELF']; } }

ensuite ma classe Dispatcher

<?php class Dispatcher { var $request; function __construct() { $this->request = new Request(); Router::parse($this->request->url, $this->request) ?? null; print_r($this->request); } } ?>

et enfin ma classe Router

<?php class Router { /** * Permet de parser une url * @param $url Url a parser * @return Tableau contenant les parametres **/ public static function parse($url, $request) { $url = trim($url, '/'); $params = explode('/', $url); $request->controller = $params[0]; $request->action = isset($params[1]) ? $params[1] : 'index'; $request->params = array_slice($params, 2); return true; } }

Et index.php

<?php require_once 'elements/header.php'; require_once 'wilfred/includes.php'; define ('JONAPACK', dirname(__FILE__)); define ('ROOT', dirname(JONAPACK)); define ('DS', DIRECTORY_SEPARATOR); define ('WILFRED', ROOT.DS.'wilfred'); define ('BASE_URL', dirname(dirname($_SERVER['SCRIPT_NAME']))); new Dispatcher(); ?> <?php require_once 'elements/footer.php'; ?>

Voici le message d'erreur
(https://drive.google.com/file/d/1103ZN-GGaorY7amGpHSeInbST_hO-mT3/view?usp=share_link)

Glioburd, il y a 3 ans

C'est écrit dans les messages, ta classe Request n'a pas de propriété controller, action et params :

class Request { public $url; // URL appelle par l'utilisateur public $controller; public $action; public $params; function __construct() { $this->url = $_SERVER['PHP_SELF']; } }
Wilnbsi, il y a 3 ans

Merci beaucoup, nous les debutants il ya des trucs qu'on ne voit pas vite

Glioburd, il y a 3 ans

De rien ! Oui c'est normal :)
Mais la plupart du temps, les erreures sont assez explicites, il ne faut pas paniquer sur une page d'erreur, souvent elle t'indique exactement où ça se passe mal :D. Comme ici !