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 :

Erreur avec this->maVariable


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut Erreur avec this->maVariable
    Bonjour,

    Je suis sur une station Linux Ubuntu 4.5, Apache 2.0 et PHP Version 5.3.2-1.

    J'ai 2 problèmes majeurs. Le premier est que lorsque il y a des erreurs de script (par exemple quant il manque un point-virgule ; en fin de ligne) aucun message d'erreur ne s'affiche. Comment donc faire pour afficher un message d'erreur, avec notamment les numéros de ligne. Il y a t-il un fichier .ini a configurer ?

    Le second problème est que la syntaxe objet du type this->maVariable ne fonctionne pas. Elle semble générer une erreur ou n'est pas supportée. Quid ?

    Par exemple:

    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
     
    class Matrix {
     
        var $M;
        var $num_rows;
        var $num_cols;
        var $lastError;
     
        function Matrix() {
            $M = array();
        }
     
        function setRows($rows) {
            $num_rows = $rows;     
        }    
     
        function setCols($cols) {
            // this->num_cols = $cols;     GÉNÈRE UNE ERREUR !!!!!
        }    
     
     
    }
    Merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par Jolt0x Voir le message
    Le premier est que lorsque il y a des erreurs de script (par exemple quant il manque un point-virgule ; en fin de ligne) aucun message d'erreur ne s'affiche. Comment donc faire pour afficher un message d'erreur, avec notamment les numéros de ligne. Il y a t-il un fichier .ini a configurer ?
    display_errors = On
    Le fichier php.ini chargé est indiqué dans la sortie du phpinfo (/etc/php5/apache2/php.ini ?).

    Citation Envoyé par Jolt0x Voir le message
    Le second problème est que la syntaxe objet du type this->maVariable ne fonctionne pas. Elle semble générer une erreur ou n'est pas supportée. Quid ?
    Comment ça ? Par contre c'est $this et non this.

  3. #3
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    OK, merci beaucoup. Il maquait le $ (dollars) juste avant le this.

    Autre question qui me bloque:

    Dans ma classe j'ai une variable $M de type Array. Dans le constructeur je fait: J'ai des seteurs qui me permettent de renseigner les champs de ce tableau $M. Le tableau $M est à deux dimension. Aussi, d'habitude pour accéder a un élément du tableau on fait: $M[1][3], pour avoir l'élément de ligne 1 et de colonne 3 par exemple. Cependant lorsque j'utilise le pointeur cela ne fonctionne pas. Lorsque je fait echo il affiche "[1][3]". C'est curieux.

    J'ai essayé avec un tableau a une dimension et j'ai le même résultat. Comment donc accéder a un élément du tableau avec $this-> ?

    Cela fonctionne parfaitement bien avec les autres variables de ma classe (du type $this->maVariable)

    Merci.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Code ?

    Mais si vous réalisez une interpolation, il faut entourer le tout (la "variable") d'accolades :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "{$this->M[1][3]}"; # Mais ici c'est parfaitement inutile : echo $this->M[1][3];
    (voir la documentation)

    PS : il manquait effectivement des this-> dans le code ci-dessus. A noter également que c'est du code "PHP 4" (le plus important étant le constructeur unifié __construct).

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    juste pour dire que t'es en php 5.3, mais que t'écris ta classe comme du php 4

  6. #6
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Merci à tous. Je vais tester cela ce soir, chez moi.

    Autre question PHP. Est-ce que on est obligé d'utiliser le constructeur __construct dont vous avez parlé plus haut ? Est-ce que on peut faire des constructeur comme en Java (des constructeur qui portent le nom de la classe) ?

    Surcharge: Est-ce que la surcharge des constructeurs existe en PHP (j'aurais besoin de faire plusieurs constructeur dans ma classe)? Et la surcharge des fonctions ?

    Merci.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Est-ce que on est obligé d'utiliser le constructeur __construct dont vous avez parlé plus haut ? Est-ce que on peut faire des constructeur comme en Java (des constructeur qui portent le nom de la classe) ?
    Justement, Java c'est Java, Php c'est Php.
    Donc pour le constructeur, c'est : __construct()

    Ceci dit, il est possible de faire comme Java, soit utiliser le même nom que la classe, pour le moment, mais à l'avenir ça risque de ne plus être pris en compte, ça sera considéré comme une méthode lambda.
    Autant utiliser la syntaxe recommandée, propre au langage.


    Pour la surcharge, il faut appeler le parent dans le constructeur de la classe enfant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct() {
        parent::__construct();
        // Surcharge en dessous
    }
    C'est le même principe que n'importe quelle méthode d'ailleurs.
    Je suppose que c'est pareil en Java, non ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Merci, mais tu n'as répondu qu'a la première question. S'il est recommandé d'utiliser ___construct, je le ferais.

    L'autre question, sur la surcharge du constructeur, était de savoir si on peut faire plusieurs constructeur dans une même classe. Par exemple un constructeur qui prend en paramètre un entier et un constructeur qui prend en paramètre une autre variable (une chaîne de char, par exemple ou un type crée). Le choix du constructeur à utiliser lors de l'instanciation se faisant sur la signature de celui-ci.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Non, cela n'est pas possible en PHP. Ni la surcharge de méthode.

    Il faut se limiter aux paramètres de fonction par défaut pour gérer des comportements particuliers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function maFonction( $paramObligatoire, $paramOptionnel = null )
    http://fr2.php.net/manual/fr/functions.arguments.php

    Quant aux types, c'est très limité. Tu peux typer tes paramètres de fonction seulement dans le cas d'une classe ou d'un array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function maFonction( MaClasseX $monObjet , array $monTableau )
    http://fr2.php.net/manual/fr/languag...ypehinting.php
    Pourfendeur de singletons en croisade

  10. #10
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    OK, merci.

  11. #11
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Je reviens a la charge. Le code proposé par vous pour accéder a un variable de type tableau a double entrée dans une classe, avec le pointeur "this" ne fonctionne toujours pas.

    J'ai une classe "Matrix" dans laquelle j'ai une variable $M de type tableau. Je l'initiale sans problème (soit dans le constructeur, soit avec des "seteurs"). Mais pour afficher le contenu du tableau, ca ne va pas.

    J'essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $this->M[1][1];
    Ca ne va pas !

    J'essaie aussi ceci, comme proposé plus haut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo {$this->M[1][1]};
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "$this->M[1][1]";
    Cela ne fonctionne pas.

    Une idée ?

  12. #12
    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
    "ça ne va pas" et "ça ne fonctionne pas" c'est un peu léger pour nous aider à voir ce qui se passe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 277
    Points : 64
    Points
    64
    Par défaut
    Non. C'est bon. Tous roule.

    Il restait une ligne (dans une routine d'initialisation) qui n'était pas bien corrigée selon vos indications et qui faisait que cela ne fonctionnait pas. C'est fait et tous marche.

    A nouveau merci.

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

Discussions similaires

  1. [POO] Erreur avec $this
    Par Touareg dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2007, 07h29
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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