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 :

Access to undeclared static property [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut Access to undeclared static property
    Bonjour tout le monde
    Comment ça va ?
    Je viens vers vous car je n'arrive pas a résoudre un problème depuis ce matin j'ai ce message d'erreur :
    Fatal error: Access to undeclared static property: technicien::$_db in C:\wamp\www\lcesa2\technicien.class.php on line 17
    Voici le code :
    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
    <?php 
    require_once "connexionBDD.class.php";
    class technicien {
    	public function technicien(){		
    		$connexion = new Mysql();
    		$connexion->Connect();
    	}
    	public function getList(){
    	$tech = array(); 
        $q = technicien::$_db->query('SELECT Nom FROM technicien');
        while ($donnees = $q->fetch(PDO::FETCH_ASSOC)){
          $tech[] = new technicien($donnees);
        }
        return $tech;
    }
    }
    ?>
    Voici la ligne 17 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = technicien::$_db->query('SELECT Nom FROM technicien')
    Je debute en POO et j'avoue avoir du mal a comprendre comment cela fonctionne mais faut s'accrocher

    Merci pour votre aide et votre patiente toujours précieuse les amis !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = $this->connexion->query('SELECT Nom FROM technicien');
    La syntaxe avec :: se lit "objet::methodestatique()".
    En dehors de la syntaxe, tu vois bien que $_db n'existe nul part dans ta classe.

    Pour le reste, je ne vois pas bien ce que tu essaies de faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tech[] = new technicien($donnees);
    Ce n'est pas plutôt simplement
    ?

    Attention aussi : si tu as une méthode "technicien" dans une classe "technicien", cette méthode sera un constructeur pour la classe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Bonjour sabotage et merci de ton aide =)
    J'ai remplacé le code que j'avais enfin la ligne par la tienne voici le message d'erreur qui est présent en PLUS du précédent :
    Notice: Undefined property: technicien::$connexion in C:\wamp\www\lcesa2\technicien.class.php on line 19
    Bah je veux les retourner en objet mes résultats .. j'en conclus que ce n'est pas la bonne méthode pour se faire lol
    Oui c'est voulu que ce soit un constructeur ^^


    ------------

    Du coup j'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $q = technicien::$connexion->query('SELECT Nom FROM technicien');
    Message d'erreur :
    Fatal error: Access to undeclared static property: technicien::$connexion in C:\wamp\www\lcesa2\technicien.class.php on line 19

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Bonjour a tous, le problème persiste et je n'ai toujours pas trouver de solution est ce quelqu'un aurait une idée ?
    Merci pour voter aide

  5. #5
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Sabotage t'as déjà répondu, et je ne vois rien qu'il n'ait pas couvert ici...

    En gros, tu as des méthodes et propriétés dites statiques ou de classe, accessible en utilisant nom_de_classe::méthode_ou_propriété, qui doivent être explicitement déclarées statiques (static), et de l'autre côté tu as les propriétés et méthodes de ton objet (appartenant à une instance donnée de la classe), accessible en interne avec $this;

    Il va donc falloir dans ton constructeur (que tu peux renommer __construct() au lieu de technicien()) que tu assignes ton instance de PDO à quelquechose que tu pourras utiliser dans ta classe, car la le scope de $connexion est interne à ton constructeur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class technicien {
     
            private $connexion;
     
    	public function __construct(){		
    		$this->connexion = new Mysql();
    		$this->connexion->Connect();
    	}
    }
    Tu remarqueras le $this qui precède connexion, permettant la référence à l'attribut connexion de ton objet. Tu devras aussi l'utiliser pour les accès suivants.
    Je ne sais pas d'où sort ta classe Mysql, mais en général en php on utilise une minuscule au début des noms de méthodes (majuscule pour le nom de classe), donc je serais d'avis de renommer Connect() dans Mysql...

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Bonjour théocrite =)
    j'avais fais ce que sabo' m'avais dit et je viens de faire ce que tu m'as proposé mais j'ai toujours le même message d'erreur voici le code de connexionBDD.php :

    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
    <?php
     
    class Mysql {
        //informations de connexion
        private static $serveursql = "localhost";
        private static $utilisateursql = "root";
        private static $passwordsql = "lcesa";
        private static $basesql = "lcesa";
     
        private static $connecte = false;
        private static $bdd = null;
     
        public function Mysql()
        {
            try
            {
                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                Mysql::$bdd = new PDO('mysql:host='.Mysql::$serveursql.';dbname='.Mysql::$basesql, Mysql::$utilisateursql, Mysql::$passwordsql, $pdo_options);
                Mysql::$connecte = true;
            }
            catch (Exception $e)
            {
                die('Erreur : ' . $e->getMessage());
            }
        }
     
        public static function Connect()
        {
            if (!Mysql::$connecte){
                $obj = new Mysql();
                return Mysql::$bdd;
            }
            else
                return Mysql::$bdd;
        }
     
        public static function Disconnect()
        {
            $connecte = false;
            $bdd = null;
        }
     
        public static function IsConnected()
        {
            return $connecte;
        }
     
    }
     
    ?>

    Et voici le code de technicien.class.php :

    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
    <?php 
     
    require_once "connexionBDD.class.php";
     
    class technicien {
     
        private $connexion;
     
    	public function __construct(){		
    		$this->connexion = new Mysql();
    		$this->connexion->Connect();
    	}
     
    	public function getList()
    	{
    		$q = thist->connexion->query('SELECT Nom FROM technicien');
     
    		while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
    		{
    			$tech[] = $donnees;
    		}
     
    		return $tech;
    	}
     
    }
     
    ?>

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = thist->connexion->
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Oui je l'ai vu ensuite cette erreur mais ça ne change rien au problème ...

    Fatal error: Call to undefined method Mysql::query()

  9. #9
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Ce serait bien que tu cherches par toi meme et que tu essaye de comprendre comment marche la visibilité des variables...

    En fait ta classe mysql ne s'appelle pas du tout comme tu l'as fait, on dirait un espece de singleton foireux au passage je sais pas ou tu l'as trouve mais je te conseille de suivre un vrai cours de PHP.

    Donc pour Mysql, au lieu de faire new Mysql, tu peux faire Mysql::Connect(), ce qui te retourne un objet PDO. Tu as decide de le stocker dans $this->connexion, donc maintenant tu peux utiliser $this->connexion->query().

  10. #10
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Je ne fais que ça j’attends pas comme un robot qu'on m'apporte la solution toute faite je veux surtout comprendre !! J’essaie de suivre des tutoriels PHP sur sur dev.com mais je ne comprend pas beaucoup de chose je suis toute seule pour faire tout ça, j'ai zéro expérience en POO, donc pas besoin de me dire de chercher toute seule comme si en gros j'attendais juste qu'on me règle le problème et rien d'autre ...
    Ce qui vous semble évident ne l'es pas pour tout le monde messieurs les développeur

    Pardon de paraitre agressive mais a chaque foi que je poste on me rabache les même chose et quand je vois certains autre postes qui pose carrément des questions pour expliquer quelque chose qui est en tuto sur ce même site et qu'on y répond volontiers et sans bronché bah ça me met un peu les boules a la gorge !!

    Des efforts j'en fais, je suis troisieme de ma classe et j'essaie de me lancer dans cette POO qui me rend dingue depuis plus de deux mois !!
    Donc oui je cherche, oui je n'ai certainement pas les capacités cérébrales de certains mais je me donne du mal pour y arriver et ce n'est pas en me disant a chaque foi cherche par toi même que je vais m'en sortir ...

    Merci quand meme de votre aide et bonne journée

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais ça ne change rien au problème ...
    Au passage, donne nous les erreurs exactes que tu rencontres avec les numéros de ligne.
    Parce que là tu nous disais que c'était toujours la même chose alors que l'erreur était différente.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Je ne dis pas que tu ne fais pas d'effort, et je me suis peut etre mal exprime quand je te disais de chercher par toi-meme, mais je pense que tu ne travailles pas sur ce probleme avec le bon axe... Tu devrais commencer par des exemples plus simple, fait un objet, dump le sur une interface, puis deux objets, une interaction entre eux... avec un rendu visuel simple (un __toString de la classe ou n'importe).

    La tu n'as pas les bases, tu utilises une classe (Mysql) qui sort de je ne sais ou mais qui est vraiment crade franchement...

    Sur les messages d'erreur par contre je plussoie encore sabotage.

  13. #13
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Donc incompréhension de notre part, miles excuses cher Thomas

    Oui elle est immonde je suis d'accord avec toi
    J'ai pas trouvé sur le net de petits exo de débutant en POO juste des gros gros tutos ou il faut juste faire copier coller des lignes de codes et ça ne m’intéresse pas de copier coller personnellement
    Et quand j'en ai demandé a ma prof de dev elle m'a dit qu'on ne voyais ça que en deuxième année du coup je dois attendre pour les cours ^^

    Je vais essayé de reprendre tout depuis le début et je posterais à nouveau.
    Merci a vous deux de votre patiente et votre aide

  14. #14
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Rebonjour a tous !
    J'ai une petite question est ce que c'est mieux de faire un fichier connexion.class.php avec uniquement la connexion la déconnexion a la BDD et ensuite pour chaque traitement faire un autre fichier ou alors dans chaque fichier de traitement de la BDD me reconnecter a la BDD ?

  15. #15
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Desole de ne pas avoir repondu plus tot.

    Tu peux regarder du cote des frameworks php et principalement du cote des DBAL (DataBase Access Layer) pour etudier comment ils fonctionnent. Pour moi c'est de loin la meilleure facon de proceder en OOP.

  16. #16
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    bonjour bonjour Mais il n'y a aucun problème voyons merci d'avoir répondu je vais me renseigné sur ce sujet merci beaucoup ! bonne journée a toi

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

Discussions similaires

  1. The static method should be accessed in a static way
    Par Memeche dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 10/03/2014, 09h18
  2. static method should be accessed in a static way
    Par b_lob dans le forum Général Java
    Réponses: 18
    Dernier message: 04/05/2011, 00h41
  3. erreur 1119: Access of possibly undefined property ..
    Par ouldfella dans le forum Flash
    Réponses: 1
    Dernier message: 23/03/2010, 12h25
  4. Réponses: 20
    Dernier message: 21/06/2006, 20h44
  5. access 97 - DAO - objet property
    Par sundjata dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/11/2005, 04h17

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