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] Souci de syntaxe [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut [POO] Souci de syntaxe
    Bonjour,

    J'ai un souci.....

    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
    class Logging extends MYsql
    { 	private $table, $debug;
    
    	function __construct( $debug )
      	{	$this->table = "log" ;
    		$this->debug = $debug   ;
    		
    		user_error("Constructor LOGGING OK" , E_USER_NOTICE) ;
      }
        
      function __destructor()
      {    $user_error("logging - Destructor", E_USER_NOTICE) ;	}
    //  =====================================================================================================================  // 
    //												MYsql class FUNCTIONS                                                        //
    //  =====================================================================================================================  //
      	function connect( $where )
      	{	if ($this->debug)
    			user_error("Logging - Open[".$where."]", E_USER_NOTICE) ;
    Ligne 25 ==>return( $this->open = MYsql::connect( $where ) ) ;  	
    	}
    
      	function query($req)
      	{	if ($this->debug)
    			user_error("Logging - Query[".$req."]", E_USER_NOTICE) ;
    		$this->query = MYsql::query($req) ;     
    		return($this->query) ; 
    	}
     
    	function num_rows($res)
      	{  	if ($this->debug)
    			user_error(" Logging - num_rows[".$res."]", E_USER_NOTICE) ;
    		$this->num = MYsql::numRows($res) ;     
      		return($this->num) ;     
    	}
    J'ai ma classe LOgging qui a MYsql comme chiild et je ne peux accéder à la méthode connect !

    Pourtant, j'ai la même syntaxe dans une autre méthode et semble fonctionner...

    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 Member extends MYsql 
    { 	var $MYsql, $debug, $connect, $query, $num, $fetch, $backlink, $password ;
    //
    //	Constructor & Destructor
    //	========================
    	function __construct($debug=false)
      	{ 	$this->table = "member" ;
    		$this->debug = $debug   ;
    		
    		if ($this->debug )
      		 	user_error("Member - Constructor OK", E_USER_NOTICE) ;				
      	}
    	
    	function __destructor()
    	{	if ($this->debug )
    			user_error("Member - Destructor", E_USER_NOTICE) ;	
    	}
    //  =====================================================================================================================  // 
    //												MYsql class FUNCTIONS                                                        //
    //  =====================================================================================================================  //
      	function connect( $where )
      	{	if ($this->debug )
    			user_error("Member - Connect[".$where."]", E_USER_NOTICE) ;
    		return( $this->connect = MYsql::connect( $where ) ) ;  	
    	}
    Bien entendu, MYsql::connect existe bien

    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
    // =============================================================================================================================== //
    //                                 Class MYsql                                                                                   //
    // =============================================================================================================================== //
     class MYsql extends Environ 
     {	private $debug ;	
       	private $idConn = NULL; 	// identifiant de connexion
       	private $result; 			// resultat de la requête
    	private $utf8;              // Booléa n=> protocole pour l'alphabet accentué
    	private $query;             // Requête exécute pouvant être du type: 'select','show','explain' ou 'describe'
      	private $env = array ( ) ;  // Contient la description de l'environnement, utiliser [display_environ] pour l'affichage !
     
      /***
       * @desc   : Constructeur de la classe
       * @param  : none
       * @return : none
       */ 
       public function __construct($utf8=true, $debug, $id='defaut') 
       {		//-------------------------------------------------------------------//
    		//appel de la méthode "Connect"                                      //
    		//-------------------------------------------------------------------//
    		self::Connect();
       }//end __construct()
     
     
        }//end destruct()
     
     /***
       * @desc   : Connexion  la base de donnes
       * @param  : none
       * @return : none
       */
       public function connect($wheren,$id='defaut') 
       {	$this->where = $where ;
     
       		try
     		{	// connexion au serveur mysql
    			// --------------------------
    			if ($this->debug)
    				user_error("MYsql[connect]" , E_USER_NOTICE) ;
    			$this->idConn[$this->id] = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass) ;
    			if ($this->idConn[$this->id])
    				{	// Une connexion est établie, on sélectionne notre BD
    					// --------------------------------------------------
    					$this->selectDB();
    	 			}//end if
    			else
    				{ 	// On lance une exception
    					throw new Exception("Couldn't connect to database") ;
    				}
    	 	}   catch(Exception $E) 
    		    {	$this->display_exception($E) ;
    			}
     
      }//end connect()
    J'ai un autre souci pour souci pout l'instant, je ne retrouve rien dans le log.... et il ya 1/2 h, c'était encore fonctionnel !

    D'abord, je souhaiterai savoir s'il n'y apas de pb d'écriture, ensuite qlques conseils qui seraient les bienvenus, croyez le bien !

    New.... pb log ci dessus solutionner......

    Voici le Catch que j'ai obtenu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MYsql error diagnostic
    ================
    Message: Couldn't connect to database - File: F:\WebSites\jecrapahute\class\MYsql.php - Line: 173
    
    Trace:
    ------
    => File : F:\WebSites\jecrapahute\class\logging.php
    => calling instruction: 25   Indiqué + haut
    => error class : MYsql
    => error function : connect

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Salut ,
    plusieurs remarques :

    1- Tu as un mix de code php5/php4 ca aide clairement pas à la compréhension de ton code. Tu devrais faire un choix , sois des class php5 sois php4 mais pas les deux.

    2- Tu fais dériver des classes login et membre de mysql ce qui n'a aucun sens. (Un objet membre n'a aucun rapport avec un objet mysql) Si tu veux utiliser une connexion mysql dans une de tes classe , il est plus logique de passer ton objet mysql à ta classe.

    3- Pour finir sur ton problème : Tu appeles Mysql::connect() ce qui sous entends que ta méthode connect devrait être static. Or ce n'est pas le cas.
    De même dans ta class mysql tu appelle self::connect puis utilise $this dans ta méthode , ca n'a aucun sens.

    Soit tu instancie une classe et tu accèsde a ses attribut/méthode via $this-> soit tu utilise self:: pour accéder à des éléments static (donc non reliés à une instance)

    En partant du principe que tu souhaites garder ton système d'héritage (qui est mauvais je le rappel) :
    Depuis une classe dérivé de Mysql
    Appèlera la méthode connect de Mysql SAUF si cette même méthode est redéfini dans ta classe enfant , ce que tu semble faire (pourquoi ?).

    De même ta classe Mysql n'étant pas static tu dois l'instancier dans le constructeur enfant :
    Pour finir une proposition d'organisation. pas la meilleure mais elle à le mérite de pas trop chamboulé ton code existant

    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
     
    class Mysql
    {
    	public function __construct()
    	{
    	}
     
    	public function connect()
    	{
    	}
     
    	public function query()
    	{
    	}
    }
     
    class Login
    {
    	private $sql;
     
    	public function __construct($sql)
    	{
    		$this->sql = $sql
    	}
     
    	public function methodeAyantBesoinDeRequete()
    	{
    		$this->sql->query('SELECT * FROM truc');
    	}
    }
     
    class Membre
    {
    	private $sql;
     
    	public function __construct($sql)
    	{
    		$this->sql = $sql
    	}
    }
     
    $sql = new Mysql();
    $login = new Login($sql);
    $login->methodeAyantBesoinDeRequete();
    L'autre solution serait d'avoir un singleton pour ta classe de BDD que tu appel dans tes classes quand tu en as besoin
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé 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
    Par défaut Réponse
    Grunk..... Tu n'es pas un ours que je sache ton pseudo me fait penser à une barre de chocolat....

    Bon, je reprends une source PHP4 et donc si je ne veux pas la recommencer de A à Z.... peut-être devrais-je, mais là j'ai besoin d'un tuto...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2- Tu fais dériver des classes login et membre de mysql ce qui n'a aucun sens. (Un objet membre n'a aucun rapport avec un objet mysql) Si tu veux utiliser une connexion mysql dans une de tes classe , il est plus logique de passer ton objet mysql à ta classe.
    Si je comprends bien, j'instancie MYsql au + haut niveau... et je passe le pointeur aux classes filles.... c'est cela ?

    Pour le reste, ce sont des problèmes de connaissance + appronfondie de PHP tout court.....

    Merci, je te tiens au parfum...

    @+

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par ETVigan Voir le message
    Grunk..... Tu n'es pas un ours que je sache ton pseudo me fait penser à une barre de chocolat.... +
    Une barre de chocolats ... nan mais franchement

    Si je comprends bien, j'instancie MYsql au + haut niveau... et je passe le pointeur aux classes filles.... c'est cela ?
    En fait en objet on ne dérive pas simplement car on à besoin d'un méthode d'une classe.
    Tu peux avoir une classe femme et une classe homme qui dérive d'une classe humain car une femme est obligatoirement un humain et hérite des propriété général de cette entité.

    Au contraire qu'on en commun un objet mysql et un objet login ? Absolument rien , c'est comme si tu dérivais une femme d'un poney ... Elle peut l'utiliser pour se déplacer mais n'en hérite pas pour autant.

    Donc tu passe en argument ton objet mysql au class qui en ont besoin , mais tu ne dérive pas ces classes de mysql.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé 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
    Par défaut Souci de syntaxe
    Grunk,

    Réultat très mitigé....

    Voici un extrait de ma classe Père, celle qui instancie tout !

    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
    class Skeleton extends Vector
    {   private $screen , $title  , $menu, $submenu, $subtitle, $form,  $klimsg, $mustmber, $debug ;
        private $row    , $site   , $connect_message ;
    
    
    //
    //	Déclaration des classes instantiées
    //  ====================================
    	private $session,    $environ, $zip , $iter,  $password, $member, $page, $message, $email;
    	private $connection, $vector ;
    	private $Master,  ;
    
    //	private $member, $log, $screen, $rando, $screen ;
    //  ==============================
    //$Master = new Skeleton($PTR_session, $TBL_screen, $debug=false) ;
    	function __construct($PTR_session, $TBL_screen, $debug=true)
    	{	$this->session = $PTR_session  	;	  // Venant du session_start() de la page demandée !
    		$this->debug   = $debug ;
    		
    		$this->Master = $this ;
    //      =======================
    		if ($this->debug)
    			user_error("Constructor Skeleton starting...." , E_USER_NOTICE) ;
    
    //
    //		instance de la classe MYsql
    //		=============================
    		$this->MYsql = new MYsql() ;
    //
    //		instance de la classe SESSION
    //		=============================
    /*AA
    		$this->session = new Session( $this, $this->session) ;
    		
    		if ($this->debug)
    			user_error("adding session variable" , E_USER_NOTICE) ;
    		$this->session->add("ISCONNECTED" , 0 ) ;
    */
    //		===========================================================================================================================
    //		en bas de ce point, la variable $this->ISCONNECTED (supprime ce 25/3/2010) doit tre BANNIE et remplace pas $_SESSION....
    //      ou la fonction ISCONNECTED()
    //		===========================================================================================================================
    //
    //		Table: member		
    //		=============
    		$this->member      = new Member($this->MYsql,$this->debug) ;
    Un peu + bas, j'ai (tjs dans le même "Master"..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //
    //		Table: SCREEN	(Memorise les paramètres d'une page.....	
    //		====================================================================
     		$this->page   = new Screen( $this->MYsql, $TBL_screen,  $this->debug) ;    // TBL_screen => HTML.php
    [/CODE]


    Et lors de l'utilisation de la classe Screen.... (log.php)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [03-Jun-2010 10:46:44] PHP Notice:  Member - Constructor OK in F:\WebSites\jecrapahute\class\member.php on line 18
    [03-Jun-2010 10:46:44] PHP Catchable fatal error:  Object of class MYsql could not be converted to string in F:\WebSites\jecrapahute\class\screen.php on line 12
    [03-Jun-2010 10:48:22] PHP Notice:  Constant CONNECTED_MSG already defined in F:\WebSites\jecrapahute\class\skeleton.php on line 65
    [03-Jun-2010 10:48:22] PHP Notice:  Constructor Skeleton starting.... in F:\WebSites\jecrapahute\class\skeleton.php on line 101
    [03-Jun-2010 10:48:22] PHP Notice:  Member - Constructor OK in F:\WebSites\jecrapahute\class\member.php on line 18
    [03-Jun-2010 10:48:22] PHP Catchable fatal error:  Object of class MYsql could not be converted to string in F:\WebSites\jecrapahute\class\screen.php on line 13
    Le début de Screen:

    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
    <?php
    //
    // 	Class: Screen
    //	=============
    require_once $_SERVER['DOCUMENT_ROOT'] . "/class/define/equate.php";  
    
    ]class Screen
    {   private $row, $screen , $title, $subtitle, $form , $menu, $submenu , $klimsg , $mustmber;
    	private $MYsql ;
    	private $array = array()  ;
    
    Ligne 12 ==> Hé oui, le constructor
    function __construct( $MYsql, $TBL_screen, $debug = true)	
    	{	$this->$MYsql       = $MYsql                ;
    	
    		$this->screen 		= $TBL_screen[SCREEN  ] ;
    		$this->title  		= $TBL_screen[TITLE   ] ;
    		$this->subtitle 	= $TBL_screen[SUBTITLE] ;
    Je ne comprends + rien surtout que je n'ai + rien d'afficher à l'écran maintenant.....

    Help.....

    Merci d'avance

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    au lieu de

    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé 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
    Par défaut Un poil mieux
    Grunk,

    Ca va un poil mieux....

    J'affiche....

    Mais !

    Lorsque je souhaite insérer un record dans le log, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [03-Jun-2010 11:20:22] PHP Notice:  MYsql[connect] in F:\WebSites\jecrapahute\class\MYsql.php on line 168
    [03-Jun-2010 11:20:22] PHP Notice:  MYsql[selectDB] in F:\WebSites\jecrapahute\class\MYsql.php on line 200
    [03-Jun-2010 11:20:22] PHP Notice:  log[INSERT INTO log 	(	datetime	,	event	,	client		,	ip		,
    									origin		,	page	,	email		,	method	,
    									deleted
    								) 
    				    VALUES		(	 now() 		,  'logout'	,	'NC'	,	'127.0.0.1'		,
    									'http://jecrapahute/disconnect.php'	    ,  '/index.php'	,	'jecrapahute@gmail.com'	,	'POST'	,
    									'non'
    								)
    						] in F:\WebSites\jecrapahute\class\logging.php on line 87
    [03-Jun-2010 11:20:22] PHP Fatal error:  Call to undefined method Skeleton::query() in F:\WebSites\jecrapahute\class\logging.php on line 32
    Donc, je construis bien mon sql et j'appelle MYsql....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      	
    function query($req)
     {	if ($this->debug)
    	   user_error("Logging - Query[".$req."]", E_USER_NOTICE) ;
    Ligne 32 ==> $this->query = $this->MYsql->query($req) ;     
    	return($this->query) ; 
    }
    Le log me dit que j'appelle une méthode query de Skeleton (le parent) mais si je passe MYsql comme paramètre et que j'appelle query par son intermédiare comme tu me l'as dit (ou que j'ai compris !), je ne saisis pas..... plus....


  8. #8
    Membre éclairé 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
    Par défaut Coorection
    J'ai corrigé

    Merci

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ca ne devrait pas plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function query($req)
     {	if ($this->debug)
    	   user_error("Logging - Query[".$req."]", E_USER_NOTICE) ;
    	return($this->MYsql->query($req)) ; 
    }
    ?

    En supposant bien sur que $this->MYsql est un objet de la classe Mysql et que cette dernière à bien une méthode query
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/03/2006, 11h21
  2. [ASP] Souci de syntaxe
    Par Mvu dans le forum ASP
    Réponses: 6
    Dernier message: 04/02/2006, 08h38
  3. Réponses: 4
    Dernier message: 30/01/2006, 03h08
  4. Réponses: 13
    Dernier message: 15/11/2005, 15h47
  5. [langage] ptit souci de syntaxe
    Par marouanitos dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2003, 10h28

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