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 :

Creating default object from empty value


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut Creating default object from empty value
    Bonjour,

    Pour mon site j'ai crée une classe qui fait moteur de template et que je fais évoluer selon mes besoins.

    Pour stocker les données que je dois insérer dans le template, j'ai décidé de tout regrouper dans une propriété de ma classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class TwigL {
     
    	public $data;		// toutes les données/variables a insérer dans le template
     
    ...

    un exemple de template:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="legal">
    <button class="lien_ml left" onclick="Show_ML('cgu_{{ user.langue_Suffixe() }}','{{ footer.cgu_titre }}'); return false;">{{ footer.cgu_caption }}</button>
    <span id="copyright">©{{ footer.annee }}</span>

    Ce que je veux obtenir c'est ça:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="legal">
    <button class="lien_ml left" onclick="Show_ML('cgu_{$twigl->data->user->langue_Suffixe()}','{$twig->data->footer->cgu_titre}'); return false;">{$twig->data->footer->cgu_caption}</button>
    <span id="copyright">©{$twig->data->footer->annee}</span>

    Au niveau regex pas de soucis, le moteur de template fonctionne depuis un bon moment

    Par contre au niveau POO je ne suis pas trop sur de ce que je fais.
    L'idée c'est de stocker les données comme un array a multiple dimensions avec dedans des STRING ou des pointeurs vers les instanciations d'autres classes ($user).
    Pour moi $data est une propriété qui contient des objets constitué que de propriétés.

    Déjà là j'ai du mal a bien visualiser le truc et a le décrire et en écrivant ce message je me rends compte qui il y peut être un problème de structure.

    ma classe $user devrait pouvoir être accessible comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $twigl->data->user->langue_Suffixe()
    le problème c'est que si je fais ça dans le constructeur de ma classe TwigL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class TwigL {
     
      public $data;	
     
      public function __construct($user) {
        $this->data->user = $user;
      }
    j'ai le message suivant:
    Creating default object from empty value
    Est ce qu'il est possible de faire ce que je souhaite simplement et comment le faire proprement.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    ce message indique que php essaye de créer un objet mais qu'il ne sait pas quelle classe instancier donc il crée un objet simple.
    c'est peut-être la création de "data" qui fait ça donc essayez ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function __construct($user)
    	{
    		$this->data = new stdClass();
    		$this->data->user = $user;
    	}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    ça fonctionne!

    J'avais tenté de le faire directement dans le squelette de la classe mais ça n'était pas accepté.
    J'avais pas pensé à le faire dans le constructeur.

    je viens de faire ça dans un script php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $twigl->data->title = $title;
    Et ça fonctionne directement sans avoir besoin au préalable de définir la classe de "title".
    Peut être qu'il continue automatiquement sur "stdClass()" et que l'on a besoin de faire une déclaration que si l'on veut ajouter nouvel objet d'une classe différente.

    merci pour ton aide

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    le message d'erreur est un avertissement donc le code continue et à l'air de fonctionner quand le message est caché.
    c'est peut-être ce qu'il se passe avec le 2e test, vous avez le même cas mais les messages sont cachés.

    il est conseillé d'afficher le maximum d'informations de débugage pendant la phase de développement donc regardez ces 2 réglages pour mettre l'affichage des erreurs :
    https://www.php.net/manual/fr/errorf...display-errors
    https://www.php.net/manual/fr/errorf...rror-reporting

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    J'ai vérifié et Online j'ai bien désactivé les message d'erreur mais Offline je n'ai rien fait car d'après ce que j'avais vu par défaut on est sur E_ALL.
    J'ai essayé vite fait E_STRICT qui a l'air plus complet et là j'ai eu une page vide dans le navigateur donc ça a du planter quelque part.

    Je vais activer tous les messages au max comme tu me le conseille, je ne sais pas exactement comment encore, mais ça me permettra d'avoir du code plus propre et peut être aussi de mieux comprendre ce que je fais au niveau de la POO.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    A priori E_STRICT affiche moins de messages que E_ALL, d'où ma page vide puisque actuellement ma classe de Template ne sort plus de HTML.
    J'ai essayé E_ALL et pas plus de messages d'erreur donc je pense que par défaut on est déjà sur E_ALL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('error_reporting', E_ALL);
    ini_set("display_errors", 1);
    j'ai aussi essayé display_errors et rien de plus non plus, ça a l'air aussi activé par défaut.

    Donc j'en revient à ma théorie que l'objet parent sert de modèle pour la création des objets enfant quand on ne fait pas la déclaration explicite.
    Du moins peut être si on reste sur des classes basiques inclus dans PHP, avec des classes perso ce n'est surement pas la même histoire.
    C'est pour ça qu'en créant une propriété dans ma classe perso, le compilateur est perdu et demande une déclaration explicite si je mets autre chose qu'une simple variable dedans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.5] Erreur Creating default object from empty value
    Par Claude30120 dans le forum Langage
    Réponses: 3
    Dernier message: 29/10/2016, 23h10
  2. [4.1] Creating default object from empty value
    Par maxgosset dans le forum Laravel
    Réponses: 2
    Dernier message: 18/11/2015, 12h45
  3. [PHP 5.3] Strict standards: Creating default object from empty value in
    Par pape0 dans le forum Langage
    Réponses: 8
    Dernier message: 16/05/2011, 22h54
  4. unable to create variable object
    Par Batou dans le forum C++
    Réponses: 2
    Dernier message: 09/05/2006, 07h49

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