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 :

Portée variable de classe


Sujet :

Langage PHP

  1. #1
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Portée variable de classe
    Bonsoir,

    Un petit souci de portée de variables qui ont instanciées une classe telle que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Conn = new Connection($TBL_screen, $debug=true) ;
    // =============================================================================================================================== //
    require_once $_SERVER['DOCUMENT_ROOT'] . "/config/canevas.php";
    // =============================================================================================================================== //
    Je n'ai pas eu le choix mais le site sur lequel je travaille est composé de 2 parties (en vraiment très gros....) les pages en HTML et un gestionnaire à qui ont peu faire appel pour bcp de tâches en PHP 5.3.2.
    le $Conn , je peux le propager et l'utiliser dans mon code HTML presque partout mais il y a des cas que je ne peux identifier, raisons de ce mail.

    Certes si $Conn est utilisé dans une procédure, PHP ne sait plus de quel type il appartient et donne des erreurs...

    J'ai une cascade de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once fichier.php
    qui font que le code est assez bien structuré et dans cette cascade si je place à un endroit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $Conn ->do_something(&a,,&b)  ?>
    et bien cela ira !

    Mais c'est comme si PHP à partir d'une certaine "profondeur" arrêtait son job !

    Voici un cas ou cela ne fonctionne plus.. et ceci après 2 ou3 require_once:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    	require_once $_SERVER['DOCUMENT_ROOT'] . "/config/functions.php";
    
    	$dis_enable = "enable" ;	
    	
    	if ( isset( $_POST["infonmbr_send"] ))
    		{	$Conn->email->addrecipient("je......@gmail.com",$name='Esteban') ;
    j'ai le msg suivant dans mon log:

    15-May-2010 18:09:33] PHP Fatal error: Call to a member function addrecipient() on a non-object in F:\WebSites\Je.......\doc\do_infonmbr.php on line 46


    Pouvez-vous m'éclairer ? Ce serait sympa.....
    Esteban

  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
    Comme l'indique l'erreur, $Conn->email n'est pas un objet.
    D'ou vient-il ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Portée des variables dans du code HTML
    email vient du constructeur de la classe connection que voici:

    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
    class Connection extends Vector
    {	private $debug, $message, $member, $logging, $email, $zip ;
    	
      	function __construct($TBL_screen,$debug=false)
    	{	$this->debug 	  = true ; // $debug ; 
    		$this->TBL_screen = $TBL_screen ;
    
    		$this->__set(SCREEN   	, $this->TBL_screen["screen"  ]	) ;
    		$this->__set(TITLE    	, $this->TBL_screen["title"   ]	) ;
    		$this->__set(SUBTITLE 	, $this->TBL_screen["subtitle"]	) ;
    		$this->__set(FORM	 	, $this->TBL_screen["form"	  ]	) ;
    		$this->__set(SUBMENU  	, $this->TBL_screen["submenu" ]	) ;
    		$this->__set(MUSTMBER 	, $this->TBL_screen["mustmber"]	) ;
    		$this->__set(KLIMSG   	, $this->TBL_screen["klimsg"  ] ) ;
    
    		$this->member  = new Member    ($this->debug) ;
    		$this->message = new Message   ($this->debug) ;
    		$this->logging = new Logging   ($this->debug) ;
    		$this->zip     = new Postcode  ($this->debug) ;
    		$this->email   = new Simplemail($this->debug) ;
    As-tu assez d'info pour l'instant....

    Un big merci
    Esteban

  4. #4
    Membre averti Avatar de sayari.dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 142
    Points : 300
    Points
    300
    Par défaut
    Tu peux essayer print_r($Conn->email) pour s'assurer de quel type d'objet il s'agit
    C'est en faisant n'importe quoi qu'on devient n'importe qui

  5. #5
    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
    L'attribut email est de visibilité restreinte (privé) à la base. Si PHP ne lève pas d'erreur fatale en tentant d'y accéder c'est que la méthode magique __get est implémentée et retourne une valeur autre la concernant (NULL probablement).

    Ce code est donc à revoir : __get doit en retourner la valeur ou alors prévoir et utiliser un accesseur dédié (sans doute mieux).

  6. #6
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Le membre $email est private...

    edit: grillé par julp

  7. #7
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Portée variable de classes
    Juste, c'est devant mes yeux et je ne vois que la portée est PRIVATE !

    Bien fait pour ma pomme

    Encore Merci
    Esteban

Discussions similaires

  1. Portée des variables de classe
    Par Pierrot92320 dans le forum Général Python
    Réponses: 24
    Dernier message: 11/01/2014, 08h50
  2. Portée des variables entre classes
    Par Gnifrus dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/03/2013, 14h37
  3. [Débutant] adresser une variable de type string et de porté dans la classe
    Par JeanNoel53 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/05/2012, 17h20
  4. [POO] Portée des variables de classe
    Par guidav dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2007, 19h27
  5. Réponses: 6
    Dernier message: 23/09/2005, 12h54

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