Qui est le FILS et qui est le PERE
Je ne te suis pas Grunk
Dans mon exemple précédent... jugé ok il y a quelques jours, j'avais
Code:
TBdesigner extends html
Et rien pour html fils de TBdesignsd
extrait de cet exemple
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
|
class html {
private $class_tbdesigner;
private $class_td;
private $class_tr;
private $class_table;
function __construct($css) {
print("hrml __construct" . CRLF) ;
$this->class_tbdesigner = $css[0] ; // $class_tbdesigner;
$this->class_td = $css[1] ; // $class_td;
$this->class_tr = $css[2] ; // $class_tr;
$this->class_table = $css[3] ; // $class_table;
}
function getClassTag($node) {
// $this->getHtmlTag($node) ;
......
}
}
class tableDesigner extends html{
private $tbdesigner;
private $data;
private $id_container;
private $table_title;
private $id_title;
private $html ;
function __construct( $tbdesigner,
$data,
$id_container = "",
$id_title = "Click Me to toggle",
$table_title = "Table Title",
$css = array("","","","")
) |
De la, je me suis fait un croquis comme tu le conseilles
Et j"ai
Code:
1 2 3 4 5
| TBDesigner extends Cells
Cells extends html
Html rien... |
Je ne pige plus Grunk
Qui est le FILS et qui est le PERE
Bon on recommence....
A extends B
A enfant de B
Ok ?
Code:
1 2 3 4 5
|
TBDesigner extends HTML
TB........... enfants d'HTML
TB... hérite des propriété d'HTML
HTML est le parent de TB.... |
Je crois que jusque là, nous sommes d'accord !
J’introduis le concept de Cells entre TB er HTML
donc TB extends CELLS au lieu d'HTML
et CELLS extends HTML
et HTML
Cela voudrait dire que
TB est enfant de CELLS et PETIT-FILS d'HTML
puisque
CELLS est enfant d'HTML
....... est fils de TB
HTML est grand-père de TB
CELLS est père de TB et fils d'HTML
Je crois avoir été au bout du raisonnement là et de la généralisation faite après le cas à 2 niveaux...
Maintenant par rapport au code proprement-dit
Code:
1 2 3 4 5 6 7
|
class html {
private $class_tbdesigner;
private $class_td;
private $class_tr;
private $class_table;
private $debug; |
Html n'étends rien, donc est père, grand-père de ces enfants
et...
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
class cells extends html{
/**
* __constructor
*
*/
function __contruct($css,$debug=FALSE) {
parent::__construct($css,$debug) ;
print("__construct[cells]" . CRLF) ;
}
} |
Cells étend HTML donc est fils d'Html, hérite donc de son père
Et enfin
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
class tableDesigner extends cells{
private $data, $rowCnt, $colCnt;
function __construct( $colCnt, $css = array(), $debug=FALSE )
{ $this->rowCnt = 0 ;
$this->colCnt = $colCnt ;
$this->data = NULL ;
parent::__construct($css,$debug) ;
print("__construct[tabledesigner]". CRLF) ;
} |
TB extends Cells, TB est fils de Cells, donc hérite des propriétés de son père CELLS...
Je crois avoir été au bout du raisonnement sur papier et à l'écran...
Je pense avoir généralisé de 2 à 3 niveaux sans avoir fait d'erreur...
Mais il y a erreur puisque PHP râle...
Désolé Grunk.... merci encore...
Qui est le FILS et qui est le PERE
Pige pas ton raisonnement
Code:
TB & CELLS sont soeurs....
Merci de tes précisions...
Qui est le FILS et qui est le PERE
Merci Grunk... de recadrer par rapport au post précédent... et des 2 soeurs
Voici la portion de code demande
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
|
/**
* getClassTag
*
*/
function getClassTag($node) {
switch($node) {
case DESIGN : return( $this->class_td!="" ? " class=\"".$this->class_tbdesigner."\"" : "") ;
break;
case TD : return( $this->class_td!="" ? " class=\"".$this->class_td."\"" : "") ;
break;
case TR : return( $this->class_td!="" ? " class=\"".$this->class_tr."\"" : "") ;
break;
case TABLE : return( $this->class_td!="" ? " class=\"".$this->class_table."\"" : "") ;
break;
default : user_error("getClassTag[".$node."] undefined !" , E_USER_NOTICE) ;
break;
}
}
/**
* END: hrml
*
*/ |
Merci à toi !
Qui est le FILS et qui est le PERE
Grunk,
Réponse attendue;..
voici:
Code:
1 2 3 4 5 6 7 8
|
__construct[html]
__construct[tabledesigner]
__construct[html]
cnt[1]
cnt[2]
cnt[1]
string(2) "td" |
avec
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
|
function printTable($return=FALSE) {
$tb = "<table".$this->getClassTag("table").">\n";
foreach ($this->data as $key => $value) {
$tb .= "<tr".$this->getClassTag("tr").">\n";
foreach($value as $css => $cssvalue) {
var_dump($this->getClassTag("td").CRLF) ;
62==> $tb .= "<td".$this->getClassTag("td").">".$cssvalue."</td>\n";
}
$tb .= "</tr>\n";
}
$tb .= "</table>\n";
$tb .= "\n";
if ($return)
return $tb;
else
echo $tb;
}
function getClassTag($node) {
switch($node) {
case DESIGN : return( $this->class_td!="" ? " class=\"".$this->class_tbdesigner."\"" : "") ;
break;
case TD : var_dump($this->class_td) ;
return( $this->class_td!="" ? " class=\"".$this->class_td."\"" : "") ;
break;
case TR : return( $this->class_td!="" ? " class=\"".$this->class_tr."\"" : "") ;
break;
case TABLE : return( $this->class_td!="" ? " class=\"".$this->class_table."\"" : "") ;
break;
default : user_error("getClassTag[".$node."] undefined !" , E_USER_NOTICE) ;
break;
}
} |
le log:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
[24-Aug-2012 12:10:34] PHP Warning: Invalid argument supplied for foreach() in F:\WebSites\skelt\class\html.php on line 28
[24-Aug-2012 12:10:34] PHP Stack trace:
[24-Aug-2012 12:10:34] PHP 1. {main}() F:\WebSites\skelt\index.php:0
[24-Aug-2012 12:10:34] PHP 2. html->__construct() F:\WebSites\skelt\index.php:24
[24-Aug-2012 12:10:34] PHP Catchable fatal error: Object of class cells could not be converted to string in F:\WebSites\skelt\class\tableDesigner.php on line 62
[24-Aug-2012 12:10:34] PHP Stack trace:
[24-Aug-2012 12:10:34] PHP 1. {main}() F:\WebSites\skelt\index.php:0
[24-Aug-2012 12:10:34] PHP 2. tableDesigner->printTable() F:\WebSites\skelt\index.php:53 |
html....
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
|
function __construct($css,$debug=False) {
print("__construct[html]". CRLF) ;
28==> foreach($css as $key => $value) {
switch($value) {
case DESIGN : $this->class_tbdesigner = $key ; // $class_tbdesigner;
break ;
case TD : $this->class_td = $key ; // $class_td;
break ;
case TR : $this->class_tr = $key ; // $class_tr;
break ;
case TABLE : $this->class_table = $key ; // $class_table;
break ;
default : user_error("Undefined case in html[".$value."]" , E_USER_ERROR) ;
break ;
}
}
$this->debug = $debug ;
} |
Voilà, je pense n'avoir rien oublié... merci
4 pièce(s) jointe(s)
Qui est le FILS et qui est le PERE
Je comprends ce que tu me dis Grunk
Mais cela fonctionne à 2 niveaux - FILS, PERE - et ne fonctionne plus avec l'ajout de la CELL...
Autrement rien n'a été modifié...
Je ne vois donc pas ce que je devrais modifié - à 1ère vue... - :aie::aie:
Source en pièces attachées !
Merci Grunk
Qui est le FILS et qui est le PERE
Je comprends ce que tu me dis Grunk
Mais cela fonctionne à 2 niveaux - FILS, PERE - et ne fonctionne plus avec l'ajout de la CELL...
Autrement rien n'a été modifié...
Je ne vois donc pas ce que je devrais modifié - à 1ère vue... - :aie::aie:
Source en pièces attachées !
Je viens de repasser à 2 classes et tout fonctionne comme avant...
Cela ne veut pas dire que tout est défini comme il devrait... le fait d'introduire une 3ième classe fait sans doute qu'un passage de paramètre ne se fait pas comme attendu... mais là je patine...
Merci Grunk
Qui est le FILS et qui est le PERE
Merci Grunk...
Je pense qu'il y a une erreur de conception
Je m'explique...
TBDesigner est initié avec les paramètres généraux de la table
addRow de tbdesigner est la méthode utilisée pour ajouter une ligne de la table.....
printTable de tbdesigner est utilisé pour la génération html de la table et donc, appelle getClassTag pour afficher la cellule avec les tags html
----------
A partir du moment ou addRow existe, il n'y a selon moi, aucune raison d'avoir un lien TBDesigner - cells - html...
cells -> html reste...
---
Cells a été introduit pour définir une cellule, taille, style ($css) et colSpan
Le $css définit dans TBDesigner, ce qui m'a sans doute enduit en erreur...
Je pense que cela clarifie un peu... Non ?
Pas tout à fait d'accord sur ton commentaire par rapport à la clarté du code, heureusement que tu n'as pas vu celui-ci avant nettoyage comme annoncé il y a quelques jours, depuis lors celui-ci a été fait... LOL
--
Mais cela me pose d'autres questions...
Car une méthode d'html (getClassTag) est utilisée et la classe n'est pas instancié explicitement... juste hérite via l'extends de tableDesigner...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class tableDesigner extends cells{
private $css, $debug, $colCnt ;
private $data, $rowCnt;
function __construct( $colCnt, $css = array(), $debug=FALSE )
{ $this->colCnt = $colCnt ;
$this->css = $css ;
$this->debug = $debug ;
//
$this->rowCnt = 0 ;
$this->data = NULL ;
// parent::__construct($css,$debug) ;
print("__construct[tabledesigner]". CRLF) ;
} |
Actuellement, seul la méthode addRow contient du code de test... ou bidon..
Selon moi, le reste est "propre"... selon moi....
.....
Merci Grunk
Qui est le FILS et qui est le PERE
Je pensais avoir tout mis à plat après avoir fait mon 1er test ok avec 2 classes -TBDesigner et Html - mais c'est l'introduction de Cells qui a généré des interrogations et donc des questions même sur des acquis que je pensais être derrière moi
Ces questions se trouvent en bas de mon post précédent et restent sans réponse, que ce soit par lecture, pdf ou via votre site !
Quelque soit l'exemple, ces questions seraient je pense, toujours d'actualité !
Tu ne crois pas ?
La question principale est comment une classe peut elle être instanciée sans passer par son contructeur (et donc un print() témoin... ?
J'ai toujours dans mon code:
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
|
class tableDesigner extends cells{
private $css, $debug, $colCnt ;
private $data, $rowCnt;
function __construct( $colCnt, $css = array(), $debug=FALSE )
{ $this->colCnt = $colCnt ;
$this->css = $css ;
$this->debug = $debug ;
//
$this->rowCnt = 0 ;
$this->data = NULL ;
// parent::__construct($css,$debug) ;
print("__construct[tabledesigner]". CRLF) ;
....
class cells extends html{
private $cellDef ;
/**
* __constructor
*
*/
function __contruct($cellDef,$css,$debug=FALSE) {
$this->cellDef = $cellDef ;
parent::__construct($css,$debug) ;
print("__construct[cells]" . CRLF) ;
}
...
class html {
private $class_tbdesigner;
private $class_td;
private $class_tr;
private $class_table;
private $debug;
/**
* __constructor
*
*/
function __construct($css,$debug=False) {
print("__construct[html]". CRLF) ; |
Je n'ai que le print de TBDesigner visualisé à l'écran...
Merci Grunk