Parent avec 2 lignes de fils/fillles
Grunk,
Je suis entrain d'essayer de"accéder à une méthode de la fille à partir du frère.
Quand, j'instancie le frère, je passe le résultat de l'instanciation de la soeur.
Code:
1 2 3 4 5 6
| /**
* Signon dépend de Membre
* -----------------------
*/
$signon = new Signon($this->member, $this->debug) ;
$signon->execute() ; |
Quand dans Signon, j'essaye d'accéder la soeur, voici ce que j'obtiens:
Citation:
[15-Jun-2010 14:07:55] PHP Notice: skeleton[1] : email & Psw OK ! in F:\WebSites\jecrapahute\class\signon.php on line 64
[15-Jun-2010 14:07:55] PHP Notice: gu_member acccessed AAAAA! in F:\WebSites\jecrapahute\class\newMember.php on line 98
[15-Jun-2010 14:07:55] PHP Fatal error: Call to undefined method Signon::dbSelect() in F:\WebSites\jecrapahute\class\newDB.php on line 150
En 64, ce la veut juste dire que les 2 champs sont corrects
Dans signon, j'ai
Code:
if ($this->row = ( Member::gu_member($email, md5($psw) ) ) )
Qui la classe Membre instancié et qui a fait le display
Code:
gu_member acccessed AAAAA
Donc, j'accède à mon logivciel de DB....
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public function dbQuery($query)
{ $this->query = $query ;
if ($this->debug)
user_error("MYsql[Query]" , E_USER_NOTICE) ;
// Verifier s'il y'a une connexion établie à un serveur et que la DB est séléctionné"
// ----------------------------------------------------------------------------------
if ($this->idConn == NULL)
ligne 150 { $this->dbSelect() ;
}//end if |
Mais faut croire que je n'y accède pas de la bonne façon car il teste s'il a une conexion et sinon il l'a crée.... à cet instant le $this->DbSelect foire
dbSelect appartient à ma classe MYsql et non à Signon...., c'est 150
Je ne sais plus, je vais me changer les idées un peu !
Comment puis-je faire ? :aie::aie::aie:
Je pars pour 2 h; espère te lire à mon retour.
Class OOP vous avez dit facile ?
Grunk,
Si tu te souviens.... on ne sait jamais.... j'ai le schéma
Skeleton => Environ = MYsql qui est une des branches filles.
J'en ai une autre, dans laquelle il y a la classe Membre qui a besoin de MYsql
Je vais relire ton code mais j'ai en effet avec 'ma méthode' d'instanciation, j'ai des objects uniques dont j'ai l'adresse dans Skeleton.....
Enfin, je vais y réfléchir avec ton code sous les yeux... merci :lol:
2 pièce(s) jointe(s)
Class OOP vous avez dit facile ?
Grunk,
Le code pour instancier la 2 ième branche est écrit et en principe exécuté mais les user_error dans le __construct n’apparaissent pas dans le log.
Je rentrais dans le code de cette classe Signon car les (isset($_POST[bouton connect]) s'y trouvaient !
J'ai remonté cette interception dans le skelet et dès l'interception réalisées, j'instancie Signon et j'essaye de brancher à une méthode, en vain.
Le code du _construct est clair et doit me répondre dans le log!
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| function construct($db, $debug)
{ $this->debug = true ;
$this->db = $db ;
if (is_resource($db))
user_error("Signon: This is a ressource" , E_USER_WARNING) ;
else
user_error("Signon: This isn't a ressource" , E_USER_ERROR) ;
// if ($this->debug)
user_error("Signon instanciared !" , E_USER_NOTICE) ;
} |
Donc, j'en conclus que je n'instancie pas car 1) je devrais avoir une warning dans le log si ok et 2) un stop si KO !
Code:
1 2 3 4
| [15-Jun-2010 16:32:59] PHP Notice: Signon[0]: connection asked! in F:\WebSites\jecrapahute\class\newSkelt.php on line 180
[15-Jun-2010 16:32:59] PHP Notice: Skelet[Connect] in F:\WebSites\jecrapahute\class\newSkelt.php on line 206
[15-Jun-2010 16:32:59] PHP Fatal error: Call to a member function connect() on a non-object in F:\WebSites\jecrapahute\class\newSkelt.php on line 207 |
En 180 j'ai l'interception du $_POST
En 207 j'essaye de brancher à une métode de la classe signon et le message est clair....
Je te mets les 2 sources en pièces attachées ce sera sans doute + facile pour toi.
Si je trouve, je t'envoie un msg, ok ? :roll:
Je ne bouge plus ajd'hui.
@+
Class OOP vous avez dit facile ?
Grunk,
J'ai simplement déplacer l'instanciation de Signon avant le code d'interception des boutons de la forme.
Les displays dans le log ont changé mais Signon n'est tjs pas instanciés !
Code:
1 2 3 4 5 6 7 8 9
| [15-Jun-2010 16:55:38]
Code:
12 | PHP Warning: Missing argument 3 for Skeleton::__construct(), called in F:\WebSites\jecrapahute\class\newSkelt.php on line 178 and defined in F:\WebSites\jecrapahute\class\newSkelt.php on line 66
[15-Jun-2010 16:55:38] PHP Notice: Undefined variable: debug in F:\WebSites\jecrapahute\class\newSkelt.php on line 69 |
[15-Jun-2010 16:55:38] PHP Notice: Signon[0]: connection asked! in F:\WebSites\jecrapahute\class\newSkelt.php on line 187
[15-Jun-2010 16:55:38] PHP Notice: Skelet[Connect] in F:\WebSites\jecrapahute\class\newSkelt.php on line 206
[15-Jun-2010 16:55:38] PHP Notice: >>>>>>>>>>>>>>>> connect <<<<<<<<<<<<<<<<<<< in F:\WebSites\jecrapahute\class\signon.php on line 71
[15-Jun-2010 16:55:38] PHP Notice: skeleton[1] : email & Psw OK ! in F:\WebSites\jecrapahute\class\signon.php on line 75
[15-Jun-2010 16:55:38] PHP Fatal error: Call to a member function dbQuery() on a non-object in F:\WebSites\jecrapahute\class\signon.php on line 59 |
Ce qui m'inquiète tjs depuis 2 jours sont les messages en gras :
Voici la différence de coding dans Skelet:
Code:
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
|
/**
* Signon dépend de Membre
* -----------------------
*/
$this->signon = new Signon($this->db, $this->debug) ;
$this->signon->execute() ;
/**
* A ce moment, mon input est soit inséré ou la page existante est éventuellement mise à jout, maintenant il faut l'afficher
* Affichage de la page .... Instanciation de la classe Signon et inteception éventuelle des événemets de Signin/login/Logout
* --------------------------------------------------------------------------------------------------------------------------
*/
$this->displayPage() ;
/**
* Exécution dépendante des classes instanciées dans cette méthode[execute]
* ------------------------------------------------------------------------
*/
$this->post_execute() ;
} catch (Exception $E) {
die("SKELETON ERROR: " . $this->myException->display_exception($E) . "<br/>");
}
}
/**
* Post_execute: toutes les classes sont instanciées et prêtes à recevoir les instructions du visiteur !
* =============
*/
function post_execute()
{ // user_error("POST_EXECUTE" , E_USER_NOTICE) ; // OK, j'y passe
/**
* Interception des événements de Signon (includes/signon.php)
* -----------------------------------------------------------
*/
if (isset($_POST["skelt_connection"]))
{// if ($this->debug)
==> 187 user_error("Signon[0]: connection asked!" , E_USER_NOTICE) ;
$this->connect() ;
}
if (isset($_POST["skelt_deconnection"]))
{ if ($this->debug)
user_error("Signon[1]:[session_destroy]" , E_USER_NOTICE) ;
$this->disconnect() ;
}
/**
* Instanciation de la classe Signon et interception éventuelle des événemets de Signin/login/Logout (laquelle dépends de MEMBER)
* -------------------------------------------------------------------------------------------------------------------------------
*/
// if ($this->debug)
{ print("==========> Instanciating Signon" . CRLF );
}
}
function connect()
206 { user_error("Skelet[Connect]" , E_USER_NOTICE) ;
$this->signon->connect() ; // test
} |
Qui cherche trouve ne dit-on pas ? :lol:
Grand merci......
Class OOP vous avez dit facile ?
Grunk, je ne te prends pas pour une bille , non j'en suis bien loin crois moi.
Oui tu m'as dit ce matin que le construct ne devait pas avoir des parenthèses.
Et là et là et la , je t'ai fait la remarque que si le constructeur avait des paramètres, il fallait bien ces parenthèses.
J'en suis à +/- 15 classes pour ce site qui sont presque toutes utilisées sans problème... honnêtement je ne vois pas ce que je peux modifier....
Je viens de faire un test maintenant, je n'instancie pas mais je branche bien à une méthode de cette classe.
Classe à qui je passe comme paramètres la classe MYsql...
Donc le $this->db de cette dernière n'est pas un objet comme le log me le dit bien:
Code:
1 2 3 4 5 6 7 8 9 10 11
| [15-Jun-2010 17:08:35] PHP Notice: Skeleton Starting in F:\WebSites\jecrapahute\class\newSkelt.php on line 72
[15-Jun-2010 17:08:35] PHP Notice: Constructor Skeleton OK ! in F:\WebSites\jecrapahute\class\newSkelt.php on line 261
[15-Jun-2010 17:08:35] PHP Warning: Missing argument 3 for Skeleton::__construct(), called in F:\WebSites\jecrapahute\class\newSkelt.php on line 159 and defined in F:\WebSites\jecrapahute\class\newSkelt.php on line 66
[15-Jun-2010 17:08:35] PHP Notice: Skeleton Starting in F:\WebSites\jecrapahute\class\newSkelt.php on line 72
[15-Jun-2010 17:08:35] PHP Warning: Invalid argument supplied for foreach() in F:\WebSites\jecrapahute\class\newSkelt.php on line 76
[15-Jun-2010 17:08:35] PHP Notice: Signon[0]: connection asked! in F:\WebSites\jecrapahute\class\newSkelt.php on line 190
[15-Jun-2010 17:08:35] PHP Notice: Skelet[Connect] in F:\WebSites\jecrapahute\class\newSkelt.php on line 206
[15-Jun-2010 17:08:35] PHP Notice: >>>>>>>>>>>>>>>> connect <<<<<<<<<<<<<<<<<<< in F:\WebSites\jecrapahute\class\signon.php on line 71
[15-Jun-2010 17:08:35] PHP Notice: skeleton[1] : email & Psw OK ! in F:\WebSites\jecrapahute\class\signon.php on line 75
[15-Jun-2010 17:08:35] PHP Notice: gu_member acccessed AAAAA! in F:\WebSites\jecrapahute\class\signon.php on line 53
[15-Jun-2010 17:08:35] PHP Fatal error: Call to a member function dbQuery() on a non-object in F:\WebSites\jecrapahute\class\signon.php on line 59 |
Je vais relire tes messages pour les parenthèses, j'ai un livre PHP5, je vais y jeter un coup d’oeil .....8O
Class OOP vous avez dit facile ?
Ok pour les __ construct dans Signon.....
Je te présente mes plates excuses....... :?:?
Class OOP vous avez dit facile ? DB dipatch
Grunk,
J'ai une question architecture, hé oui cela m'arrive....
J'ai une petite dizaine de classe qui accèdent toutes à MYsql.
J'ai un souci car même si je passe ma classe MYsql vers ma classe MYSQL fille disons.... il faut dans les cas voir si la connection est valide - sinon la créer - et sélectionner la DB - ce qui ne pose pas de problème puisque que je suis mono db - mais il en est autrement pour le queRy...
Je passe d'une classe à l'autre - je conçois que ce soit critiquable - mais j'imagine une class - ette .... :) (tu auras compris) au niveau du Skelet dans laquelle tu enregistres la table souhaitée en variable statique - ou de session - et qui ferait le dispatch de la classe had hoc.
En gros cette classe ferait:
1) L'enregistrement de la classe dès instanciation
2) Le dispatch vers la nouvelle classe souhaitée....
Donc pour chaque statement MYsql, je remonterais au niveau Père avec le nom de la table/classe souhaitée/accédée au niveau de ce dispatcher.
Comparaison serait faite et dispatch vers celle-ci.
Mais chaque classe fille devrait recevoir un tableau avec :
A) l'adresse de ce dispatcher quoique je pense qu'on puisse l'adresser sans passer par là
B) l'adresse MYsql comme d'hab
Par contre afin d'éviter le bouclages, celle-ci doit séparer sa requête et le point d'entrée après dispatching....
Je ne sais si c'est clair....
Mais qu'en penses-tu ?
:mrgreen:
Class OOP vous avez dit facile ?
Donc mon idée n'était pas conne mais je dois décharger une classe de Zend ?
Merci.... mon chiien veut sa promenade... @+ :P