Auto-définition des methodes d'une class

Bonsoir Messieurs les programmeurs,

Je suis à la recherche d’information sur la technique à utiliser pour concevoir une class qui définisse elle même ces propres méthode en PHP.
Exactement, je souhaiterais crée (pour la soutenance à un examen) une class qui est l’image de ma page html pour y insérer du code html via l’objet.

Si vous avez 1 ou 2 sites à me conseiller pour m’aider dans mon développement, je vous en serais très reconnaissant.

Merci.
Edité le 02/02/2008 à 16:16

www.php.net…

Je ne sais pas ce que tu veux faire, mais :

class X {
  function __call($name, $args) {
    echo 'call of ', __CLASS__ , '->', $name, '()';
    var_dump($args);
  }
}

Te permettra de faire des “auto méthodes”.

Ceci étant, je n’ai pas compris le reste de ton problème.

Je cherche à faire une class qui va rechercher certains paramètres dans une page html.
Ces paramètres écrits sous la forme, par exemple : #TITRE#
Sera remplacé par une fonction get_titre() et une autre set_titre($value) associé à une variable $page_titre
Le principe de cette classe serai de pouvoir introduire une multitude de paramètres dans la page html, et de tous les retrouver facilement sous forme de fonction.
Lors de la génération de la page il remplacera automatiquement tous ces paramètre par les variables en mémoire.

class scribe {
private $mapage ;
public fonction __Construct($unepage)
{
   $mapage = file_get_contents($unepage) ;
   // Code permétant l'auto définition des métodes
}
public fonction construction_page()
{
   // recherche dans ma page les paramètres et les remplaces par le code demander
    ...
   echo $mapage
}
// Ce que je souhaite générer automatiquement
private $page_titre ;
// A limite je peux utiliser une surcharge entre le get et le set et le remplacer juste par fonction titre()
public fonction get_titre ()
{
   return $page_titre ;
}
public fonction set_titre ($value) 
{
   $page_titre = value ;
} 
...
//fin de génération du code
}

Voila je ne peut pas être plus claire. J’espère que quelqu’un aurai des renseignements sur la technique que je pourrais utiliser, en attendant j’aurai peut être trouver qu’elle que chose qui s’appelle la reflection.

Je vous remercie tous d’avance.
Edité le 02/02/2008 à 11:12

Le mieux ne serais pas de passé par une fonction “qui fait tout”, du genre :


class Scribe {
 private $maPage; // contient les donnée brute de la page
 private $listeElements = array(); // Contient la liste des elements de la page et la valeur assicée

 public function Scribe( $cheminPage ) {
  $this->maPage = file_get_contents( $cheminPage ); // On stock la page
  $this->_parsePage(); // On execute la fonction qui cherche les elements
 }
 
 private function _parsePage() { // Fonction qui cherche les elements
  // Tu recherches tout les elements qui doivent étre modifier dans ta page et
  // tu les mets dans le tableau associé
  if( preg_match_all( '/#([^#]*)#/', $this->maPage, $match ) ) { // Exprésion reguliere pour trouvé les elements
   // Je sais pas si elle est bonne, j'ai pas verifié c'est pour donner une idée
   foreach( $match as $element ) { // On parcours les resultats
    $this->listeElements[ $element[1] ] = true; // On met une valeure arbitraire
   }
  }
 }

 public function getElement( $element ) {
  return $this->listeElements[ $element ]; // On retourne l'élement demandé
 }

 public function setElement( $element, $value ) {
  $this->listeElements[ $element ] = $value; // on effecte la valeur à l'élément demandé
 }

 public function contructionPage() {
  foreach( $this->listeElements as $key => $value ) { // On parcours notre liste d'élément
   str_replace( '#'.$key.'#' , $value , $this->maPage ); // On remplace les #..# par la valeur associée
  }
  return $this->maPage; // On returne la page modifier
 }
}

Edité le 02/02/2008 à 13:05

Merci PyrO_70,

Je trouve ton idée beaucoup plus facile à mètre en œuvre que la mienne. Il est beaucoup plus facile de géré un tableau qui prendra comme nom de colonne prendra le nom du paramètre.

Sinon tu as Smarty comme moteur de template qui fait plus ou moins le même boulot.