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 :

Appel de la classe à classe [PHP 5.3]


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 Appel de la classe à classe
    Bonjour,

    J'ai un souci, une classe principale qui instancie toutes les autres.
    Une page de mon site qui fait appel à l'une d'entre elle et celle-ci souhaite faire appel à une méthode d'une autre classe pourtant instanciée aussi.
    Et c'est à ce moment que j'ai mon problème.
    Je vais de toute façon mettre les sources en pièce attachée mais j'explique un peu.

    Voici le log.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
    [09-Aug-2010 16:03:09] PHP Notice:  Undefined property: Subscribe::$msgInst in F:\WebSites\jecrapahute\class\subscribe.php on line 207
    [09-Aug-2010 16:03:09] PHP Stack trace:
    [09-Aug-2010 16:03:09] PHP   1. {main}() F:\WebSites\jecrapahute\lostpassword.php:0
    [09-Aug-2010 16:03:09] PHP   2. setScreen->execute() F:\WebSites\jecrapahute\lostpassword.php:14
    [09-Aug-2010 16:03:09] PHP   3. Skeleton->execute() F:\WebSites\jecrapahute\class\setScreen.php:136
    [09-Aug-2010 16:03:09] PHP   4. Skeleton->displayPage() F:\WebSites\jecrapahute\class\newSkelt.php:261
    [09-Aug-2010 16:03:09] PHP   5. require_once() F:\WebSites\jecrapahute\class\newSkelt.php:342
    [09-Aug-2010 16:03:09] PHP   6. require_once() F:\WebSites\jecrapahute\config\myPage.php:175
    [09-Aug-2010 16:03:09] PHP   7. require_once() F:\WebSites\jecrapahute\doc\do_lostpassword.php:77
    [09-Aug-2010 16:03:09] PHP   8. require_once() F:\WebSites\jecrapahute\includes\canevas.php:31
    [09-Aug-2010 16:03:09] PHP   9. Subscribe->getMessage() F:\WebSites\jecrapahute\form\lostpassword.php:159
    [09-Aug-2010 16:03:09] PHP Fatal error:  Call to a member function readMsg() on a non-object in F:\WebSites\jecrapahute\class\subscribe.php on line 207
    [09-Aug-2010 16:03:09] PHP Stack trace:
    [09-Aug-2010 16:03:09] PHP   1. {main}() F:\WebSites\jecrapahute\lostpassword.php:0
    [09-Aug-2010 16:03:09] PHP   2. setScreen->execute() F:\WebSites\jecrapahute\lostpassword.php:14
    [09-Aug-2010 16:03:09] PHP   3. Skeleton->execute() F:\WebSites\jecrapahute\class\setScreen.php:136
    [09-Aug-2010 16:03:09] PHP   4. Skeleton->displayPage() F:\WebSites\jecrapahute\class\newSkelt.php:261
    [09-Aug-2010 16:03:09] PHP   5. require_once() F:\WebSites\jecrapahute\class\newSkelt.php:342
    [09-Aug-2010 16:03:09] PHP   6. require_once() F:\WebSites\jecrapahute\config\myPage.php:175
    [09-Aug-2010 16:03:09] PHP   7. require_once() F:\WebSites\jecrapahute\doc\do_lostpassword.php:77
    [09-Aug-2010 16:03:09] PHP   8. require_once() F:\WebSites\jecrapahute\includes\canevas.php:31
    [09-Aug-2010 16:03:09] PHP   9. Subscribe->getMessage() F:\WebSites\jecrapahute\form\lostpassword.php:159
    L'endroit au cela plante..... dans subscribe.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
    }/**
    * function getMessage()
    * =====================
    */	
    	function getMessage() {
    		switch( $_SESSION['subscribe_curr'])
    207=>		{	case INITSUB :	$message = $this->msgInst->readMsg( $this->message[ $_SESSION['subscribe_curr'] ] ) ;
    							break ;
    							
    			case INITUPD :	$message = $this->msgInst->getMsg("UPDDATA") ;
    							break ;
    							
    			case INITPSW :	$message = $this->msgInst->getMsg("INEMAIL") ;
    							break ;
    $this->msgInst->readMsg fait appel à un pointeur sur une instance de msg (msgInst) définit dans une classe skeleton.

    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
    /**
    * 					Instanciation de la classe Message
    *       			----------------------------------
    */
               			if ($this->debug)
    						print("==========> Instanciating Message" . CRLF );
    					$this->msgInst = new Message($this->dbInst,$this->debug) ;
    					$this->msgInst->execute() ;     						
    
    /**
    * 					Instanciation de la classe Subscribe
    *       			------------------------------------
    */
               			if ($this->debug)
    						print("==========> Instanciating Subscribe" . CRLF );
    					$this->subInst = new Subscribe($this,$this->debug) ;
    					$this->subInst->execute() ;
    On trouve la classe subscribe qui fait appel à une méthode de la classe message, toutes 2 instanciées dans la classe "maitre" skeleton.

    Je bloque actuellement sur ce problème et j'ai essayé bcp de syntaxes sans trouver la bonne.

    J’oubliais l'endroit ou j'appelle la classe suscribe, dans do_lostpassword.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $this->subInst->actualize	( 	array(  INITPSW  ,  CATPCHA  , CONFIRM ) ,		
    								array(  INEMAIL ) ,																						// Message
    								array(	"Rentrez votre Email" , "Rcopiez le code" , "Vous confirmez ?" )                             	// Button
    							) ;
    Tout cela semble peut être un peu compliqué - je le concède - je suis passé au modèle OOP pensant simplifier mon site, je ne pense pas y être encore arrivé....

    Merci à celui qui me sortira de là car cela lui demandera un peu de fouilles....
    Fichiers attachés Fichiers attachés
    Esteban

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Si je ne m'abuse, tu as un souci dans subscribe.php, méthode getMessage (ligne 205):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case INITSUB :	$message = $this->msgInst->readMsg(...
    Je n'ai pas vu d'attribut msgInst dans ta classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Subscribe
    {	private $debug, $start, $end, $master, $row ;
    	private $button, $message ;
     
    	private $disenabled = array ( 	false 	=> "disabled" , 
    									true 	=> "" 
    								) ;
    C'est d'ailleurs ce que le message d'erreur nous dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PHP Notice:  Undefined property: Subscribe::$msgInst in F:\WebSites\jecrapahute\class\subscribe.php on line 207

  3. #3
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Salut,

    ca me semble normal readMsg() n'est pas dans le scope de $this->msgInst non ?

    Il faudrait que ta classe Subscribe étende Skeleton par exemple

    EDIT: et ce qui est dit au dessus est vrai aussi

  4. #4
    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 Problème d'appel iner-classe
    Merci Antoine (Entre Belge, on s'entraide.......) Merci Olivier (j'espère ne plus me tromper maintenant.....)

    La classe subscribe est instanciée dans skeleton mais ne l'étend pas.
    Comme le tout ne fait (à la fin des includes) qu'une seule source, je pensais pourvoir faire directement appel à toutes les classes instanciées dans Skeleton, je me trompe ?????

    Esteban

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Au pire, faire une méthode statique

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    skeleton::readMsg()

  6. #6
    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
    La seule chose que j'ai changé est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Skeleton   extends Classlogging
    {		private 		$debug ,   $isMember, $dbRow ;
    		public static 	$Logging,  $Master,  $newLog,   $myExcept, $envInst, $membInst, $signInst, $dbInst, $scrnInst, $updtScrnInst, $grantVisitor ;
     		public static 	$classLog, $subInst, $zipInst;
      		protected       $TBL_screen , $row,  $screen,  $title,  $subtitle ,  $form,  $menu,  $submenu,  $klimsg,  $mustmber,  $bottom ,  $site;
    		public			$msgInst ;
    J'ai d'abord essayé PROTECTED mais cela n'a pas fonctionné mais bien PUBLIC
    J'aimerai piger là !

    Je ne pige pas pkoi maintenant je tourne plus loin maintenant ma page lostpassword.php plus loin
    Esteban

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

Discussions similaires

  1. ArrayList<Class> class class.setString()
    Par Onelove dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2014, 19h42
  2. Appel fonction d'une classe
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/02/2007, 15h56
  3. Appel de Fonction entre classes
    Par likenoother dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2006, 14h37
  4. GC appel depuis une autre classe
    Par dark2 dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 09/06/2006, 05h53
  5. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41

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