Tableau contenant les informations de la requête * */ public function __construct($schema){ /* (2) On récupère les informations */ $this->schema = $schema; } /* RETOURNE LES ENTREES D'UNE TABLE AVEC LA CLE PRIMAIRE SPECIFIEE * * @primary Clé primaire simple * OU * @primary Clé primaire composée * * @return Rows Tableau contenant toutes les entrées de la table * */ public function getById($primary){ /* [1] On récupère les clés primaires =========================================================*/ $keys = []; foreach($this->schema['columns'] as $k=>$v) $keys[] = $k; /* [2] Si clé simple =========================================================*/ if( count($keys) == 1 ){ /* (1) Si type INT et pas numérique */ if( $this->schema['columns'][$keys]['type'] == 'int' && !is_numeric($primary[0]) ) return $this; /* (2) Si type STRING et pas string */ if( $this->schema['columns'][$keys]['type'] == 'text' && !is_string($primary[0]) ) return $this; /* (3) Si type OK, on enregistre la condition */ $this->where[$keys[0]] = $primary[0]; /* [3] Si clé composée =========================================================*/ }else{ $defaultWhere = $this->where; /* (1) Pour chaque clé, On vérifie les TYPES */ foreach($key as $i=>$key){ /* (2) Si type INT et pas numérique */ if( $this->schema['columns'][$key]['type'] == 'int' && !is_numeric($primary[$i]) ){ $this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse return $this; } /* (3) Si type STRING et pas string */ if( $this->schema['columns'][$key]['type'] == 'text' && !is_string($primary[$i]) ){ $this->where = $defaultWhere; // On réinitialise les données si au moins 1 clé est fausse return $this; } /* (3) Si type OK, on enregistre la condition */ $this->where[$key] = $primary[$i]; } } /* [4] On renvoie l'object courant =========================================================*/ return $this; } /* GETTERS DYNAMIQUES * * @method Nom de la méthode * @parameters Tableau contenant les paramètres * * @return this Retourne l'object courant * */ public function __call($m, $a){ /* [0] On vérifie que la requête est du type 'getBy{Attribute}' =========================================================*/ if( !preg_match('/^getBy(.+)$/', $m, $regex) ) // si requête incorrecte, on ne fais rien return $this; /* [1] On récupère le nom de la colonne =========================================================*/ $column_name = ''; /* (1) formatte la requête 'MyAttribute' -> 'my_attribute' */ for( $l = 0 ; $l < strlen($regex[1]) ; $l++ ){ $letter = $regex[1][$l]; // Si la lettre est en majuscule mais que c'est pas la première if( strtoupper($letter) == $letter && $l > 0 ) $column_name .= '_'; $column_name .= strtolower($letter); } /* (2) On vérifie que la colonne existe */ if( !array_key_exists($column_name, $this->schema['columns']) ) return $this; // si n'existe pas, on ne fait rien /* [2] On vérifie le type du paramètre =========================================================*/ /* (1) Si aucun param, on quitte */ if( count($a) == 0 ) return $this; /* (2) Si type INT et pas numérique */ if( $this->schema['columns'][$column_name]['type'] == 'int' && !is_numeric($a[0]) ) return $this; /* (3) Si type STRING et pas string */ if( $this->schema['columns'][$column_name]['type'] == 'text' && !is_string($a[0]) ) return $this; /* (4) Si type OK, on enregistre la condition */ $this->where[$keys[0]] = $a[0]; } /* RETOURNE UNIQUEMENT LES CHAMPS SELECTIONNES * * @fields Libellé du champ à afficher * * @return data Tableau contenant les champs sélectionnés * @return data Valeur du champ sélectionné (si 1 seul champ) * */ public function select($fields){ } /* MODIFIE DES ENTREES * * @updates Tableau associatif contenant les nouvelles valeurs * * @return this Retourne l'objet courant (modifié) * */ public function edit($updates){} /* SUPPRIME LES ENTREES * * @return status Retourne si TRUE ou FALSE les entrées ont bien été supprimées * */ public function delete(){} } ?>