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 :

[POO] Soucis d'accessibilité de variable


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut [POO] Soucis d'accessibilité de variable
    Voici mon code au sein d'une classe :

    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
     
    public function linkdb(){
    		try
    		{
    			mysql_connect($this->host,$this->username,$this->pwd)or die("Erreur de connexion au serveur");
    			mysql_select_db($this->DBName);
    			return 0;
    		}
    		catch(Exception $e)
    		{
    			echo $e->getMessage();
    			echo "<br />echec /===========================/ <br />";
    			__destruct();
    		}
    	}
    L'instruction "mysql_select_db($this->DBName);" génère une erreur fatale :

    Fatal error: Cannot access empty property in C:\wamp\www\test\DBConnection.php on line 33

    Le problème semble être que php concidère que je souhaite accéder à la propriété $DBName qui n'est pas une propriété de la class à qui pourrait appartenir la fonction native mysql_select_db(), mais à la class que j'ai créé et qui utilisse mysql_select_db();

    Y a-t-il un moyen de specifier explicitement qu'il s'agit d'une propriété de ma class ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Hum... Tu peux toujours contourner le problème avec une variable intermédiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dbname = $this->DBName
    mysql_select_db($dbname);
    ou en utilisant des fonctions get/set
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut Merci ... :s
    EN fait un $ s'était glissé devant la propriété du coup erreur de syntaxe
    Donc pas de problème pour ça semble-t-il

    Cependant une autre erreur me préoccupe :
    la fonction __destruct(); n'est pas reconnue
    ni d'ailleur this->__destruct();

    Y a-t-il un moyen d'appeler explicitement le destructeur de la class dans une fonction membre ?
    unset(); ? est-ce pas un peu barbare ?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    La méthode destructeur doit être appelée aussitôt que toutes les références à un objet particulier sont effacées ou lorsque l'objet est explicitement détruit ou dans n'importe quel ordre de la séquence d'arrêt.
    Je pense que le destructeur est appelé automatiquement si tu utilises quelque chose comme unset sur ton objet.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre régulier Avatar de foolib
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 90
    Points
    90
    Par défaut unset ...
    si je met dans une fonction membre
    unset(this);

    php ne supprime pas ma variable, et ne génère pas non plus d'erreur

    Suis-je donc condamné à attendre la fin du script pour que php appel par defaut le destructeur ?

    Dans certains cas la destruction des objets au sein d'une fonction membre de leur class pourrait être pratique non ?..

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par RipCode Voir le message
    Dans certains cas la destruction des objets au sein d'une fonction membre de leur class pourrait être pratique non ?..
    Dans d'autres langages, oui.
    En php, c'est fort inutile, de même et surtout pour la connection à la base de données si c'était là le but de la destruction.

    bye

  7. #7
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Citation Envoyé par RipCode Voir le message
    si je met dans une fonction membre
    unset(this);

    php ne supprime pas ma variable, et ne génère pas non plus d'erreur

    Suis-je donc condamné à attendre la fin du script pour que php appel par defaut le destructeur ?

    Dans certains cas la destruction des objets au sein d'une fonction membre de leur class pourrait être pratique non ?..
    Comme l'a dit Celira, unset appelle le destructeur. Mais tu dois faire ca en dehors d'une fonction membre de l'objet ( unset($this) ne marchera pas )
    Donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $myClass = new MyClass();
    unset($myClass); // appellera MyClass::__destruct()
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

Discussions similaires

  1. [POO] Problème d'accès à une variable privée
    Par Nadd dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2006, 21h43
  2. [POO] [register-globals] Problème de variable
    Par Neuromancien2 dans le forum Langage
    Réponses: 13
    Dernier message: 06/07/2006, 11h57
  3. [POO] Classe abstraite PHP5 et variables membres
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 01h27
  4. Soucis pour récuperer mes variables ...
    Par R'SKaP dans le forum Langage
    Réponses: 13
    Dernier message: 23/01/2006, 20h04
  5. Réponses: 2
    Dernier message: 09/10/2005, 15h35

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