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 :

Classes et variables externes [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 Classes et variables externes
    Bonjour,

    J'ai ici un petit test qui d'une classe qui essaye de lire une variable externe.
    A priori, de part mes connaissances actuelles, ce ne serait pas possible mais comme on ne peut tout savoir....

    Voci mon test:

    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
     
    <?php
     
    $myString = "ABCDEFGHIJKLMNOPQRSTUVXYW" ;
     
    [class Test
    {	public $myString ;
    // 
    //		Test Constructor
    //		====================
           	public function __construct()
           	{	
           	}
     
    		function Execute()
    		{	print("myString = " . $myString) ;
    		}
     
    // 
    //		Test Destructor
    //		===================
           	public function __destruct()
           	{
           	}
     
    }
     
    $test = new test() ;
    $test->execute() ;
    ?>
    qui affiche ce qu'il peut:

    Avec le log attendu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [11-Jun-2010 12:20:19] PHP Notice:  Undefined variable: myString in F:\WebSites\architecture\grunk2.php on line 16
    [11-Jun-2010 12:20:48] PHP Notice:  Undefined variable: myString in F:\WebSites\architecture\grunk2.php on line 16
    Connaissant la puissance de PHP, je suis à peu près certain qu'il y a moyen, mais je ne suis pas encyclopédiste....

    Merci à celui qui me mettra sur la voie
    Esteban

  2. #2
    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
    C'est on ne peut plus normal.

    Une classe ne doit JAMAIS s'appuyer sur des variables externes.

    Une classe doit être vue comme un monde fermé, qui répond à une problématique en toute autonomie et qui communique avec l'"extérieur" via une interface volontairement limitée.
    Pourfendeur de singletons en croisade

  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
    Mais je m'en doutais bien PetitBedon.....
    Il se fait que cela m'aurait bien arrangé si.....

    Enfin.... on fera avec...

    Merci à toi....
    Esteban

  4. #4
    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
    Citation Envoyé par ETVigan Voir le message
    Il se fait que cela m'aurait bien arrangé si.....
    Non. Imagine le JAMAIS en police 120.
    [beurk]
    Des moyens existent, comme le tableau $GLOBALS ou le mot clé global.
    [/beurk]
    Mais ne fais JAMAIS ça !
    Pourfendeur de singletons en croisade

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Et simplement passer la variable en argument à ta 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class Test
    {	public $myString ;
    // 
    //		Test Constructor
    //		====================
           	public function __construct($myString)
           	{
                  $this->myString = $myString;	
           	}
     
    		function Execute()
    		{	print("myString = " . $myString) ;
    		}
     
    // 
    //		Test Destructor
    //		===================
           	public function __destruct()
           	{
           	}
     
    }
     
    $test = new test($myString) ;
    $test->execute() ;
    ?>
    Ca répond pas à ce que tu souhaites faire ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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 Variable indicée comme code retour MYsql
    Bonjour Grunk,

    Pas tout à fait.... et pas pratique...

    Pour chaque page de mon site, j'ai un fichier du genre:

    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
    	$PTR_session = session_start() ;
    // =============================================================================================================================== //
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/define/equate.php" ;
    // =============================================================================================================================== //
    	$screen   = "index" ;
    	$title    = "Bienvenue sur le site de " . $site . "!" ;
    	$subtitle = "Les non-membres désireux de nous contacter sont priés de le faire" ;
    	$form     = "" ;
    	$menu 	  = $screen ;
    	$submenu  = $screen ;
    	$klimsg   = $title ; 
    	$mustmber = 0 ;
    // =============================================================================================================================== //
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/newSkelt.php" ;
    $Master = Skeleton::getInstance($PTR_session, $TBL_screen, $debug=true) ;
    $Master->Execute() ;
    Et ce sont les paramètres affichés à l'écran que je souhaite faire rentrer dans ma class Screen.
    Cela m'aurait arrangé si d'une classe X, je pouvais accéder à une variable externe...

    Ta solution est correcte mais tu t'imagines les 6 ou 7 variables que je te montre passées comme paramètres ?
    C'est possible, oui mais s'il y avait eu une autre méthode, je la prenais.

    Encore merci pour tout Grunk.....
    Esteban

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ta solution est correcte mais tu t'imagines les 6 ou 7 variables que je te montre passées comme paramètres ?
    Non mais j'imagine bien un tableau à la place de tes 7 variables

    Voir même , soyons fou , une classe de config que tu appelles là où tu en as besoin
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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 DLASSE FR CONGIF
    Grunk,

    Je retiens cette alternative.....
    Esteban

  9. #9
    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 Class et variables externes
    Grunk,

    J'ai retenu (mais pas encore testé) ta suggestion.
    Mon prototype est ici:
    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
    <?php
    $PTR_session = session_start() ;
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/setscreen.php" ;
    
    Qui contiendra la classe et constantes sci-dessous:
    
    class setScreen Extends Skeleton
    (	public $Master ;
    
    	function __construct()
    	{	protected $TBL_screen = array() ;
    		private $i = 0 ;
    		
    		try {
    				$this->execute() ;
    								
    			} catch (Exception $E) { 
    			   		die("__setParam ERROR[]" ; //. Skeleton::display_exception($E) . "<br/>");  ????????????????????????
    				}
    	}
    	
    	function execute()
    	{	$Master = Skeleton::getInstance($PTR_session, $TBL_screen, $debug=true) ;
    
    	}
    	
    	function __setParam($name,$value)
    	{	// test if not duplicated ?????
    		$TBL_screen[SCREEN] => $value ;
    	}
    
            function validate()
            {    
    if (OK)
                    $Master->execute() ;
            }
    }
    $obj = new paramScreen($PTR_session) ;
    	__setParam(SCREEN   , "index"                               ) ;
    	__setParam(TITLE    , "Bienvenue sur le site de " . $site . "!" ;
    	__setParam(SUBTITLE , "Les non-membres désireux de nous contacter sont priés de le faire") ;
    	__setParam(FORM     , "" );
    	__setParam(MENU 	, $screen) ;
    	__setParam(SUBMENU  , $screen) ;
    	__setParam(KLIMSG 	, $title) ; 
    	__setParam(MUSTMBER	, 0) ;
    ?>
    Je dois encore faire attention à la place d'un minimum de validation (SCREEN == obligatoire) et pas de duplicate... de +, parfois le MENU à la même nom que SCREEN... et puis brancher à Skeleton quand tout est fini !

    Voilà, ce n'est qu'à l"état d'ébauche mais c'est sur les rails.

    Merci de zieuter (comme on dit en belge) et merci pour tes remarques.
    Bonne journée et WE
    Esteban

  10. #10
    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 PHP5: Confusion de classes ?
    Grunk,

    J'essaye d'adopter les conventions de commentaires que tu m'as expliquées mais Paris ne se fait pas en jour, donc la source que je vais te montrer n'est pas totalement adaptée.... sorry

    Mon site a une fonction de gestion de membre qui doivent faire d'abord un SIGNIN puis LOGIN/LOGOUT....

    Dans mon Skelet j'ai crée un class Signon (renommée en Signon2 car je croyais qu'il y avait confusion avec un fichier Signon.php)

    J'instancie la classe Signon et je l'éxécute mais PHP me dit qu'il confond (c'est ce que je comprends des messages) entre le constructeur de Skeleton et celui de Signon:

    Voici Skeleton (j'ai coupé des morceaux....)
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    <?php
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/define/equate.php" ;
    require_once $_SERVER['DOCUMENT_ROOT'] . "/class/newEnv.php";  
    require_once $_SERVER['DOCUMENT_ROOT'] . "/class/newScreen.php";  
    
    class Signon2 extends Skeleton
    {
    /**
    * Skeleton Constructor
    *
    */	
    	function construct($debug)
    	{	$this->debug = $debug =true ; ////////////////////////////////////TTTTTTTTTTTTTTTTTTTTEEEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTT
    	}
    	
    /**
    * Skeleton Destructor 
    *
    */	
    	function destruct( )
    	{	}
    	
    	function execute()
    	{
    /**
    * 		Interception des événements de Signon (includes/signon.php) 
    * 		-----------------------------------------------------------
    */	
     		if (isset($_POST["skelt_connection"]))
    			{	if ($this->__get(DEBUG))
    					user_error("skeleton[0]: connection asked!" , E_USER_NOTICE) ;
       				$this->connect() ;
    			}
    		
    		if (isset($_POST["skelt_deconnection"]))
    			{	if ($this->__get(DEBUG))
    					user_error("skeleton[session_destroy]" , E_USER_NOTICE) ;
    				$this->disconnect() ;
    		}
    	}
    /**
    * 		Connect -  Signon (includes/signon.php) 
    * 		---------------------------------------	
    */	
    	function connect()
    	{	if ($this->debug)
    			user_error(">>>>>>>>>>>>>>>> Connection->connect <<<<<<<<<<<<<<<<<<<" , E_USER_NOTICE) ;
    
    	 ;
    	}					
    /**
    * 		Disconnect -  Signon (includes/signon.php) 
    * 		------------------------------------------	
    */	
    	function disconnect()
    	{	if ($this->debug)
    			user_error(">>>>>>>>>>>>>>>> Disconnect <<<<<<<<<<<<<<<<<<<" , E_USER_NOTICE) ;
    	}
    
    }
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    // ---------------------------------                   INSTANCIATION DU SKELET                   --------------------------------- //	
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    // ------------------------------------------------------------------------------------------------------------------------------- //	
    class Skeleton
    {		private 		$properties = array(), $dbEnv = array(), $param = array( ) ;
    		private 		$PTR_session, $debug ;
    		public static 	$Master, $Environ, $TBL_screen ;
    
    /**
    * Skeleton Constructor($PTR_session, $TBL_screen, $debug)
    *
    */	
     ==>  line 155      	public function __construct($PTR_session, $TBL_screen, $debug)
           	{	$this->PTR_session = $PTR_session ;
    			$this->TBL_screen  = $TBL_screen  ; 
    			$this->debug       = $debug       ;
    
    			if ($this->debug)
    				{	user_error("Skeleton Starting" ,E_USER_NOTICE) ;
           	}
    
    /**
    * Skeleton Destructor 
    *
    */	
           	public function __destruct()
           	{	if ($this->debug)
    				{	print("Skeleton Ending" . CRLF) ;   }
           	}
    
    /**
    * Execute 
    *
    */	
           	public function execute()
           	{	try {	if ($this->debug)
    						{	print("Skeleton Executing" . CRLF) ;
                   				print("===> Instanciating Environ" . CRLF );
    						}
    /**
    * 					Instanciation de la classe Environ (la classe DB est instanciée dans ENVIRON
    *       			----------------------------------------------------------------------------
    */	
    //                                   function getInstance( $utf8=true, $debug=false )
    					$this->envInst = Environ::getInstance( $utf8=true, $debug=false ) ;
    					$this->envInst->execute() ;
    					
    /**
    * 					Obtention des pointeurs des classes Environ et MYsql
    *       			---------------------------------------------------- 
    */	
     					$this->dbEnv = $this->getEnvHandler() ;
    					$this->db    = $this->getDBhandler() ;
    					$this->processDb() ;
    
    //					=====================================================================================================================
    //					A partir de ce point, cela fonctionne, mais les routines vont tjs chercher leurs paramètres dans DB plutôt qu'ENVIRON
    //					=====================================================================================================================
               			if ($this->debug)
    						{	print("==========> Instanciating Screen" . CRLF );
    						}
    
    /**
    * 					Instanciation de la classe Screen
    *       			---------------------------------
    */
    					$this->screenInst = Screen::getInstance($this->db, $this->TBL_screen, $debug=false) ;
    					$this->screenInst->execute() ;
    //					=========================================================================================================================
    //					A ce moment, mon input est soit inséré ou la page existante est éventuellement mise à jout, maintenant il faut l'afficher
    //					=========================================================================================================================
    					$this->displayPage() ;
    					
    /**
    * 					Instanciation de la classe Signon et inteception éventuelle des événemets de Signin/login/Logout
    *       			------------------------------------------------------------------------------------------------
    */
    ==> ligne 226			$signon = new Signon2($this->debug) ;
    					$signon->execute() ;
    					
    			} catch (Exception $E) { 
    			   		die("SKELETON ERROR: " . $this->display_exception($E) . "<br/>");
    				}
           	}
    /**
    * Process DB 
    *
    */	
    		function processDb()
     		{	$this->idConn = $this->db->dbConnect($debug=false,$utf8=true,$id='default') ;
    			
    			}				
    /**
    * Display Page 
    *
    */	
    		function displayPage()		
    		{	
    		}
     		function getEnvHandler()
     		{	return( $this->envInst->getEnviron() ) ;}
    		
    		function getDBhandler()
    		{	return(DB::$MYsql ) ; }
    		
    /**
    * Execute 
    *
    */	
    	function getInstance($PTR_session, $TBL_screen, $debug=false) 
    	{	if (self::$Master == NULL)
    			if (self::$Master = new Skeleton($PTR_session, $TBL_screen, $debug=false) )
    				if (self::$Master->debug)
    					user_error("Constructor Skeleton OK !" , E_USER_NOTICE) ;
    		return(self::$Master) ;
    	}
    // =============================================================================================================================== //
    /**
    * Magic prperties __set & $get
    *
    */	
    	function __get($property)
    	{   //if ($this->debug)
    		//	user_error("__get used[".$property."]" , E_USER_NOTICE) ;
    		return( (isset($this->properties[$property])) ? $this->properties[$property] : NULL ) ; 
    	}
     	
     
    	function __set($property, $value)
    	{ 	
     		//if ($this->debug)
     			//user_error("__set used[".$property."]" , E_USER_NOTICE) ;
    		return($this->properties[$property] = $value) ; 
    	}
      
    // =============================================================================================================================== //	
    /**
    * Execute 
    *
    */	
       function display_exception($E)
       {	$T = $E->getTrace() ; 
    	//	======================================================================
    		print("MYsql error diagnostic" .  "<br>\n") ;
    		print("================" .  "<br>\n") ;
    		print("Message: " . $E->getMessage() . " - File: " . $E->getFile() . " - Line: " . $E->getLine() . "<br>\n") ;
    		print("<br>\n") ;
    		print("Trace: " . "<br>\n") ;
    		print("------ " . "<br>\n") ;
    		print( "   => File               : " . $T[0]["file"]     . "<br>\n") ;
    		print( "   => calling instruction: " . $T[0]["line"]     . "<br>\n") ;
     		print( "   => error class        : " . $T[0]["class"]    . "<br>\n") ;
    		print( "   => error function     : " . $T[0]["function"] . "<br>\n") ;
    	//	======================================================================
    		user_error("Catching[connect error in File: " . $T[0]["file"] . "] - line: [" . $T[0]["line"] . "]" , E_USER_ERROR) ;  
    	//	======================================================================
    	}
    //
    // 	End of class: Skeleton
    //	======================
    }
    ?>
    Voici le log.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [14-Jun-2010 12:53:40] PHP Warning:  Missing argument 2 for Skeleton::__construct(), called in F:\WebSites\test1\class\newSkelt.php on line 226 and defined in F:\WebSites\test1\class\newSkelt.php on line 155
    [14-Jun-2010 12:53:40] PHP Warning:  Missing argument 3 for Skeleton::__construct(), called in F:\WebSites\test1\class\newSkelt.php on line 226 and defined in F:\WebSites\test1\class\newSkelt.php on line 155
    
    [14-Jun-2010 12:53:40] PHP Notice:  Undefined variable: TBL_screen in F:\WebSites\test1\class\newSkelt.php on line 157
    
    [14-Jun-2010 12:53:40] PHP Notice:  Undefined variable: debug in F:\WebSites\test1\class\newSkelt.php on line 158
    Et je construis ma classe Signon2 en ligne 226

    Je vais faire un break... depuis 7h ce matin ... et puis je reprends....

    @+
    Esteban

  11. #11
    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 Confusion de classe
    Grunk

    Je pense avoir trouvé la solution;...

    Signon extends skeleton faut pas.....

    Je l'ai fait car je souhaitais profiter de __get et __set..... c'est magic.....

    A part les rédéfinir, je ne vois comment faire, as-tu une astuce ?

    Merci à toi
    Esteban

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    mais Paris ne se fait pas en jour,
    Pour le coup c'est Rome qui ne s'est pas fait en un jour m'enfin bref

    Signon extends skeleton faut pas.....
    Ca c'est ton choix, je peux pas décider pour toi , d'autant plus que je ne comprend toujours pas ta structure de développement. Seules remarques que je puisse faire sont sur la forme pas sur le fond.

    Je l'ai fait car je souhaitais profiter de __get et __set
    Ca s'utilise où tu veux quelque soit la classe , suffit de le déclarer en fonction de tes besoins.

    Enfin ça me parait étrange (mais pas forcément faux) que toutes tes classes aient tout le temps les mêmes méthodes redéfinies à chaque fois (genre execute , est présente tout le temps mais redéfini à chaque classe).

    Je pense très honnêtement que tu ne maitrise pas parfaitement le dév objet (en tout cas en php) et que tu devrais aller au plus simple pour pas t'enliser dans des notions plus avancée
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    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 Mon choix.....
    Non, ce n'était pas mon choix....

    en faisant class Signon extends Skeleton

    J'avais des erreurs PHP comme quoi, j'instanciais 2X le Skeleton...

    Je n'ai pas trop compris et je suis allé au + simple, cela fonctionne ainsi mais c'est vrai que cela aurait été + logique de la faire comme nous avions pensé tous les 2 .....
    Esteban

  14. #14
    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 php m'ennuie.....
    Grunk,

    Si tu préfères que je ne t'adresse plus de requête, dis le moi et je respecterais.!

    Voici mon log.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [14-Jun-2010 16:35:47] PHP Warning:  Missing argument 3 for Skeleton::__construct(), called in F:\WebSites\test1\class\newSkelt.php on line 154 and defined in F:\WebSites\test1\class\newSkelt.php on line 63
    [14-Jun-2010 16:35:47] PHP Notice:  Undefined variable: debug in F:\WebSites\test1\class\newSkelt.php on line 66
    [14-Jun-2010 16:35:47] PHP Fatal error:  Call to a member function gu_member() on a non-object in F:\WebSites\test1\class\newSkelt.php on line 243
    Le missing argrument 3 pourait, je dis bien pourrat mais je n'y crois pas justifier le 1 er message.

    C'est le second que je ne comprends pas, je comprends que dans ma source nexSket en 154 j'appelle à nouveau Skelt comme définit en 63

    63 ok

    154 est l'instanciation (de la façon normale) d'une fille de skeleton.

    En fait Skeleton est réellement isntanciée par la classe que tu m'as suugèré
    ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	if ($this->validate())
    /**
    * Si Ok, on appelle le skeleton
    *
    */	
    			{	if ($this->debug)
    					{	print("Going to Skeleton ......" . CRLF) ;	
    						user_error("Going to Skeleton...." , E_USER_NOTICE) ;
    //						print_r($this->TBL_screen) ; echo CRLF ;
    					}
    
      				$Master = Skeleton::getInstance( $this->PTR_session, $this->TBL_screen, $debug=false ) ;
     				$Master->execute() ;
    			}
    Je te passe les sources de Skeleton et Signon en attachement.
    PAs sur que tu aies esoin de member qui est un vieux truc de mes débuts... faut un début à tout... le tout est de savoir quant'il commence (tu me diras )

    Je te remercie encore
    Fichiers attachés Fichiers attachés
    Esteban

  15. #15
    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 Boucle ?
    J'ai l'impression qu'il y a une boucle quelque part
    Esteban

  16. #16
    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 PHP OOP extends ????
    Grunk,

    J'espérais vraiment t'annoncer de bonnes nouvelles ce matin.
    Je suis levé depuis 4h, travaillé une heure puis re-dodo

    Je pensais avoir mis ma classe Magic avec les __get et __set au dessus de Skelet (comme il est logique de le faire, non ,c'était bien ta(notre) remarque d'hier.... ? ) sans comprendre pourquoi cela avait réussi...
    En fait je m"étais trompé de Skelt.... je viens d'être refroidit !

    Car en fait la modif est très simple, je supprime les définitions de Skelt.... le fichier Magic existe déjà et je decommente l'include de sa définition.
    C'est tout.... et PHP me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    15-Jun-2010 07:55:38] PHP Fatal error:  Class 'Environ' not found in F:\WebSites\jecrapahute\class\newDB.php on line 11
    Ce qui n'a rien à voir avec la classe Magic laquelle n'a rien à voir avec une DB et donc son environnement !!

    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
    <?php
    require_once $_SERVER["DOCUMENT_ROOT"] . "/class/define/equate.php" ;
     
    class Magic 
    {	private $properties = array() ;
    	private $debug ;
     
    /**
    * Skeleton Constructor
    *
    */	
    	function construct($debug)
    	{	$this->debug = $debug =true ;
    	}
    /**
    * Skeleton Destructor 
    *
    */	
    	function destruct( )
    	{	}
     
    /**
    * Magic prperties __get
    *
    */	
    	function __get($property)
    	{   //if ($this->debug)
    		//	user_error("__get used[".$property."]" , E_USER_NOTICE) ;
    		return( (isset($this->properties[$property])) ? $this->properties[$property] : NULL ) ; 
    	}
     
    /**
    * Magic prperties __set 
    *
    */	
    	function __set($property, $value)
    	{ 	
     		//if ($this->debug)
     			//user_error("__set used[".$property."]" , E_USER_NOTICE) ;
    		return($this->properties[$property] = $value) ; 
    	}
    }
     
    // ------------------------------------------------------------------------------------------------------------------------------- //
    Comme tu vois, cela n'a rien à voir....
    Le fichier Equate.php ne contient que des defines.....

    Je pense vraiment qu'il y a une erreur de conception dans mon site que j'essaye de découvrir.

    Le message reçu est aussi étrange que celui que je t'ai envoyé hier et que j'ai toujours:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [15-Jun-2010 07:48:26] PHP Warning:  Missing argument 3 for Skeleton::__construct(), called in F:\WebSites\jecrapahute\class\newSkelt.php on line 160 and defined in F:\WebSites\jecrapahute\class\newSkelt.php on line 66
    [15-Jun-2010 07:48:26] PHP Notice:  Undefined variable: debug in F:\WebSites\jecrapahute\class\newSkelt.php on line 69
    J'ai une question: Skelet a deux lignées d'enfants, des méthodes d'une des branches peuvent'elles être accédees par des méthodes de l'autre.
    J'aurai enviie de dire que Skelet doit se construire sa parentée et donc que cela doit être possible.... mais....

    Voilà je continue mes investigations et attends ta réponse avec impaticence
    Esteban

  17. #17
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si tu préfères que je ne t'adresse plus de requête, dis le moi et je respecterais.!
    Le problème c'est que je ne comprend pas ta façon de faire (je dois pas être le seul vu le peu d'intervenant sur tes posts) et que on tourne en rond sur des problèmes qui n'en sont souvent pas.
    J'ai l'impression que tu fais des usines a gaz pour au final pas grand chose

    J'ai survolés tes 3 classes :

    Les fonctions construct() , destruct() c'est volontaire ? ou c'est une erreur ? Parce que évidemment quand tu fait un new php va chercher __construct et non pas construct().

    Rien à voir avec ton problème actuel , mais n'envisage pas de mettre en ligne un site avec des requête SQL comme les tiennes. Il ne faut JAMAIS insérer des données utilisateurs directement dans les requetes sql sans au préalable les avoir traités et sécurisée.

    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `member` ( ...) VALUES ( '" . $_POST["email0"  ] . " ...
    autant tout de suite données accès à ta bdd au pirates

    Plus d'info : http://php.net/manual/fr/security.da...-injection.php
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    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 Site architecture
    Grunk,

    Je viens d'apprendre quelque chose à propos de construct & destruct... donc pas de parenthèse OK

    Mais mon site est en ligne depuis des mois mais n'évolue plus car je le transforme en OOP..... mais je vais lire ton article.

    C'est la même chose pour ces méthodes dans les définitions de classe ?
    Cela je peux tester rapidement.

    Sinon, rien vu de bizarre par rapport à mes messages du log ?
    Je suppose que tu l'aurais dit

    Bon, je continue, on finira bien par devenir moins mauvais....
    Esteban

  19. #19
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par ETVigan Voir le message
    Grunk,

    Je viens d'apprendre quelque chose à propos de construct & destruct... donc pas de parenthèse OK
    Non ca n'a rien à voir avec les paranthèses

    Un constructeur s'écrit :
    et pas comme tu l'as fait :
    idem pour le destructeur et les fonction magic
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    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 Construct et destruct
    Grunk,

    A partir du moment ou tu as besoin de paramètres dans le constructeur, il faut bien des parenthèses, je viens de faire un global search sur mon site et je n'en ai pas trouvé.
    A moins que tu ne veuilles parler de la construction, au moment ou on fait le $obj = nex Class ..... c'est cela ?

    Esteban

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2008, 19h04
  2. variables extern dans les classe
    Par sali lala dans le forum Eclipse
    Réponses: 1
    Dernier message: 09/04/2008, 23h21
  3. Réponses: 7
    Dernier message: 24/01/2007, 10h01
  4. Réponses: 3
    Dernier message: 12/10/2005, 09h23
  5. problème variable extern
    Par HeKaz dans le forum C
    Réponses: 14
    Dernier message: 08/01/2003, 01h44

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