Que pensez vous de mon code de génération de classes

menge51000 Messages postés 2 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 25 juillet 2009 - 23 juil. 2009 à 20:24
menge51000 Messages postés 2 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 25 juillet 2009 - 25 juil. 2009 à 11:01
Bonjour,

Après plusieurs créations de sites Internet, j'ai décidé de créer un générateur de classes approprié à ma conception. De ce fait j'aimerais avoir votre avis afin de faire évoluer mon code.

<?php
function __autoload($class_name){
require_once("./$class_name.class.php");
}

function strFormat($str){
return ucfirst(strtolower($str));
}

function tab($n){
$str = "";
for($i=0;$i<$n;$i++)
$str .= "    ";
return $str;
}

$tableName = "RUBRIQUE";
$primaryKey = "???";
$fields = array();

$stmt = myPDO::get()->query("SHOW COLUMNS FROM $tableName");

$res = $stmt->fetchAll();

foreach($res as $field){
if(isset($field['Key']) && $field['Key'] == 'PRI')
$primaryKey = $field['Field'];
$fields[] = $field['Field'];
}

/* CLASS */
echo "class ".strFormat($tableName)."{
";

/* PARAMETERS */
foreach($fields as $field)
echo tab(1)."private \$".$field.";
";
echo "
";

/* CONSTRUCT */
echo tab(1)."function __construct(\$_id){
";

echo tab(2)."\$stmt = myPDO::get()->query("SELECT * FROM $tableName WHERE $primaryKey = \$_id");
";

echo tab(2)."\$res = \$stmt->fetch(PDO::FETCH_ASSOC);
";
foreach($fields as $field)

echo tab(2)."\$this->$field = \$res["$field"];
";

echo tab(1)."}

";

/* ADD */
$params = "";
$params1 = "";
$params2 = "";
foreach($fields as $field)
if($field != $primaryKey){
$params		.= "\$_".strtolower($field).", ";
$params1	.= "$field, ";
$params2	.= "?, ";
}
$params	= substr($params, 0, strlen($params)-2);
$params1 = substr($params1, 0, strlen($params1)-2);
$params2 = substr($params2, 0, strlen($params2)-2);

echo tab(1)."public static function add($params){
";
echo tab(2)."\$stmt = myPDO::get()->prepare("INSERT INTO $tableName($params1) VALUES ($params2)");
";

echo tab(2)."\$stmt->execute(array($params));
";
echo tab(2)."return new ".strFormat($tableName)."(myPDO::get()->lastInsertId("$tableName"));
";

echo tab(1)."}

";

/* DELETE */
echo tab(1)."public static function delete(\$_id){
";

echo tab(2)."myPDO::get()->query("DELETE FROM $tableName WHERE $primaryKey = ".\$this->$primaryKey);
";

echo tab(1)."}

";

/* UPDATE */
$params = "";
$params1 = "";
foreach($fields as $field)
if($field != $primaryKey){
$params		.= "\$_".strtolower($field).", ";
$params1	.= "$field=?, ";
}
$params	= substr($params, 0, strlen($params)-2);
$params1 = substr($params1, 0, strlen($params1)-2);

echo tab(1)."public function update($params){
";
echo tab(2)."\$stmt = myPDO::get()->prepare("UPDATE RUBRIQUE SET $params1 WHERE $primaryKey=?");
";

echo tab(2)."\$stmt->execute(array($params, \$this->$primaryKey));
";
foreach($fields as $field)
if($field != $primaryKey)
echo tab(2)."\$this->$field = \$_".strtolower($field).";
";

echo tab(1)."}

";

/* GETTERS */
foreach($fields as $field){	
echo tab(1)."public function get".strFormat($field)."(){
";	

echo tab(2)."return \$this->$field;
";
echo tab(1)."}

";
}

/* SETTERS */
foreach($fields as $field){	
if($field != $primaryKey){
echo tab(1)."public function set".strFormat($field)."(\$_value){
";	

echo tab(2)."myPDO::get()->query("UPDATE $tableName SET $field = \$_value WHERE $primaryKey = ".\$this->$primaryKey);
";
echo tab(2)."\$this->$field = \$_value;
";
echo tab(1)."}

";
}
}

echo "}";
?>


Merci d'avance!

2 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
24 juil. 2009 à 12:56
Perso je te conseille de te tourner vers des solutions comme Propel ou Doctrine.. Toujours utiliser les bonnes idées des autres.. surtout s'il se font des noeuds à ta place.. LOL !!
0
menge51000 Messages postés 2 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 25 juillet 2009
25 juil. 2009 à 11:01
Je connaissais pas ça! Cela ma l'air sympa à utiliser! Et puis c'est vrai qu'on ne vas pas réinventer la roue non plus! lol! Merci pour ce petit aiguillage!
0
Rejoignez-nous