Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modification de class

vtemplate.class

Sujet résolu
    16 septembre 2020 à 0:45:04

    Bonjour,

    J'utilise depuis très longtemps le système de templates vTemplate et depuis un bon moment j'ai un message qui m'indique qu'on ne pourra plus utiliser les Class  de cette façon.

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP


    J'ai essayé de modifier la classe et je n'y suis pas parvenu. Mes connaissances en php sont insuffisante.

    Quelqu'un saurait modifier la Class pour que celle-ci soit adaptée au nouvelles conditions de php ?

    Dans le cas ou se ne soit pas possible, quelqu'un aurait un système de Template aussi simple d'utilisation à recommander  ?

    Cordialement

    Dernière version connue de la classe concernée

    <?php
    /*****************************************************************
     *			VIRTUAL-TEMPLATE
     *
     * Version : 1.3.3 Base Edition ( Octobre 2004 ) 
     *
     * Address : http://vtemplate.sourceforge.net
     * 
     * Authors: 
     *   + THIEBAUT Jean-Baptiste(J.Baptiste@leweby.com)  -  http://www.leweby.com .
     *   + CAMPANA François (grem@concept-w.net).
     * Licence: GPL.
     * 
     * 
     *
     *			  
     *****************************************************************/ 
    
    if ( !isset($DEFINE_VTEMPLATE) ){
    define("ALL",1);
    define("VARTAG","{#"); // Tag d'ouverture des variables : vous pouvez changer ce paramètre.
    define("VTEMPLATE_VERSION","1.3.3");
    define("VTEMPLATE_TYPE","BA");
    define("VTEMPLATE_BUILD","1");
    
    
    class Err {
    var $msg;
    var $titre;
    
    function error($errno,$arg="",$code=0,$disp=0){
    // Gestion des erreurs
    switch($errno){
      case 1:
        $this->titre="Erreur de session n° $code";
        $this->msg = "La zone $arg est déjà ouverte.Avant d'ajouter une session sur cette zone, vous devez la fermer à l'aide de la fonction closeSession().<br>"	;
      break;
      case 2:
        $this->titre="Erreur de session n° $code";
        $this->msg = "Vous tentez de fermer une session de la zone $arg alors qu'aucune session pour cette zone n'existe.Pour ouvrir une session, utilisez la fonction addSession().<br>";
      break;
      case 3:
        $this->titre="Erreur de session n° $code";
    	$var = $arg[1];
    	$zone = $arg[0];
        $this->msg = "Vous essayez de valoriser la variable $var sans avoir créer de session de la zone $zone.Utilisez la fonction addSession() pour créer une session, puis setvar pour valoriser une variable.<br>";
      break;
      case 4:
        $this->titre="Erreur de session n° $code";
    	$var = $arg[1];
    	$zone = $arg[0];
        $this->msg = "La variable $var que vous souhaitez valoriser n'existe pas dans la zone $zone.<br>";
      break;
      case 5:
        $this->titre="Erreur de parsing n° $code";
        $this->msg = "Vous utilisez des caractère non autorisés pour déclarer vos zones.Vous pouvez utiliser tous les caractères à l'exception de \'{\' , \'#\' \'}\' et \'|\'.<br>";
      break;
      case 6:
        $this->titre="Erreur de parsing n° $code";
        $this->msg = "Vous ne pouvez pas utiliser le même nom ($arg)de zone plusieurs fois.<br>";
      break;
      case 7:
        $this->titre="Erreur de parsing n° $code";
        $this->msg = "Vous avez oublié de fermer la zone $arg.<br>";
      break;
      case 8:
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "Le fichier template $arg est introuvable.<br>";
      break;
      case 9:
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "Impossible d'ouvrir le fichier $arg.Vérifiez les droits de ce fichier.<br>";
      break;
      case 10:
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "Impossible de lire le fichier template $arg.<br>";	
      break;
      case 11:
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "La zone $arg est introuvable.Vérifiez la syntaxe de cette zone.<br>"; 
      break;
      case 12:  
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "La variable $arg est introuvable .Vérifiez la syntaxe de la variable.<br>";	
      break;
      case 13:
        $this->titre="Erreur de traitement n° $code";
        $this->msg = "L'identifiant de fichier spécifié n'existe pas.Vérifiez les fonctions Open() de votre script.<br>";
      break;  
      case 14:
        $this->titre="Erreur de traitement n° $code";
    	$var = $arg[1];
    	$file = $arg[0];
        $this->msg = "La variable $var dans le fichier $file est introuvable.Vérifiez la syntaxe de la variable.<br>";	
      break;  
      case 15:
        $this->titre="Erreur de traitement n° $code";
    	$var = $arg[2];
    	$zone = $arg[1];
    	$fichier = $arg[0];
        $this->msg = "La variable $var dans la zone $zone du fichier $fichier est introuvable.Vérifiez la syntaxe de la variable et du nom de la zone.<br>";	
      break; 
      default:
    	 $this->titre = "Erreur inconnue $code";	 
         $this->msg = "Veuillez le rapporter aux auteurs de la classe.";
    }
    $this->titre .= ": <br>";
    if ($disp){
    	$web = "Pour plus d'informations, consultez la <a href=\"http://www.virtual-solution.net/vtemplate/docs/debug-mod.php?version=".VTEMPLATE_VERSION."&build=".VTEMPLATE_BUILD."&type=".VTEMPLATE_TYPE."&error=$code\" target=\"_blank\">doc en ligne</a>";
    	echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$web<br><br></font>";
    } 
    return -1;
    }
    // Fin classe
    }
    
    class Session extends err{
    
    var $name;		// Name of the session
    var $globalvar = array();  // List of global variable of the session
    var $varlist = array();  // List of vars in this session
    var $subzone = array(); // list of sub-zone
    var $temp; // Generated code for the current session
    var $generated = NULL; // The final code
    var $source; // Source code
    var $used=0; // Indicates if the session contain used variable
    var $stored; // Give the filename were is stored the session
    
    function Session($name,$source,$stored){
     $this->name = $name;
     $this->source = $source;
     $this->stored = $stored;
     $this->parseVar();
    }
    
    function parseVar(){
     // Récupération des noms des variables
     $regle = "|".VARTAG."(.*)}|sU"; 
     preg_match_all ($regle,$this->source,$var1);
     // Création du tableau de variable  à partir de la liste parsée.
     $this->varlist=array_merge($this->varlist,$var1[1]);
    return 1;
    } 
    
    function init(){
    if($this->used) return $this->error(1,array($this->stored,$this->name),"SESSION1",1);
    // Reset generated code
    $this->temp = $this->source;
    $this->used = 1;
    }
    function closeSession(){
    // Check if the zone has been used.    
    if(!$this->used) return $this->error(2,array($this->stored,$this->name),"SESSION2",1);
    // Set Globals vars.
    $this->generateCode();
    $this->used=0;
    return 1;
    }
    
    function reset(){
    $this->used = 0;
    $this->generated = NULL;
    return 1;
    }
    
    function addSubZone(&$subzone){
    $this->subzone[$subzone->name] = &$subzone;
    return 1;
    }
    
    function setVar($varname,$value){
    if (!$this->used) return $this->error(3,array($this->stored,$this->name,$varname),"SESSION3",1);
    if (!in_array($varname,$this->varlist)) return $this->error(4,array($this->name,$varname),"SESSION4",1);
    $regle = "(\\".VARTAG."$varname\})";
    $this->temp = preg_replace($regle,$value,$this->temp);
    return 1;
    }
    
    function dispVar(){
     echo "Liste variables de $this->name:<br>";
     foreach ( $this->varlist as $vars )
        echo "$vars <br>";
    }
    
    function setGlobalVar($varname,$value){
    $set = 0;
    if (in_array($varname,$this->varlist)){
      // Replace the var into this session 
      $this->globalvar[$varname]=$value;   
      $set = 1;
    }
      // Replace the var into sub zones
      foreach(array_keys($this->subzone) as $subzone){
          $set = $this->subzone[$subzone]->setGlobalVar($varname,$value) || $set;
      }
      return $set;
    }
    
    function replaceGlobalVar(){
    if ( count($this->globalvar) )
    foreach($this->globalvar as $varname => $value){
      $regle = "(\\".VARTAG."$varname\})";
      $this->temp = preg_replace($regle,$value,$this->temp);
    }
    }
    
    
    function generateCode(){
        if ($this->used == 0) return $this->generated;
        // Replace global var.
    	if ( count($this->globalvar) ) $this->replaceGlobalVar();
    	// Replace all unused variable by ""
        $regle = "|\\".VARTAG."([^}]*)\}|";
    	$this->temp = preg_replace($regle,"",$this->temp);
    	// Generate the subzone(s) code
    	if(count($this->subzone)){
    	  foreach(array_keys($this->subzone) as $subzone){
    		$text = ($this->subzone[$subzone]->used) ? $this->subzone[$subzone]->generateCode() : $this->subzone[$subzone]->generated;
    		$this->temp = preg_replace("(\|$subzone\|)",$text,$this->temp); 	
    		$this->subzone[$subzone]->reset();
    	  }
        }
    $this->generated .= $this->temp;
    return $this->generated;
    }
    
    function inVarList($varname){
    return in_array($varname,$this->varlist);
    }
    
    // Fin classe
    }
    
    class VTemplate_Private extends Err{
    /****************************************
    *	   Private Class.		*
    * ***************************************/
    
    var $sources=array(); // Sources des zones issues de la premiere partie du parsing.
    var $sessions=array(); // Tableau de sessions
    var $v_global=array(); // Globla var array.
    
    /****************************************************************
    	    Parsing Functions for Template files.  ( PF 1.0 )
     ****************************************************************/
    
    function getNom($code){
    // Retourne le premier nom de zone qu'il trouve dans le code
    
       preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);
       
       // Tester la présence des caratère invalides dans le nom ( | et {});
       if (@count(explode("|",$reg[1]))>1 || @count(explode("{",$reg[1]))>1 || @count(explode("}",$reg[1]))>1) exit($this->error(5,$reg[1],"PARSE1",1));
       
       return @$reg[1];
    }
    
    function endTag($code,$nom){
    // Renvoie TRUE(1) si le tag de fermeture est présent.
    
       preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
    
    return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
    }
    
    function getSource($code,$nom,$type=0){
    // Retourne le source de la zone de nom $nom
    
       preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
    
    return $reg[$type][0];
    }
    
    function parseZone($code_source,$nom_zone="|root|"){
    // Fonction récursive de parsing du fichier template
       // Vérification que la zone n'existe pas
       if (isset($this->sources[$nom_zone])) exit($this->error(6,$nom_zone,"PARSE2",1));
    
       // Enregistrement du code source
       $this->sources[$nom_zone]["source"]=$code_source;
    
       // Rappel de la fonction pour chaque fils.
       while($nom_fils=$this->getNom($this->sources[$nom_zone]["source"])){
    
         // Vérification que le tag de fin est présent.
         if (!$this->endTag($code_source,$nom_fils)) exit($this->error(7,$nom_fils,"PARSE3",1));
    
         // Parse le fils
         $this->parseZone($this->getSource($this->sources[$nom_zone]["source"],$nom_fils,1),$nom_fils);
    
         // Enregistre le nom du fils dans la liste des fils
         $this->sources[$nom_zone]["fils"][]=$nom_fils;
    
         // Remplace le code du fils dans le source du père
         $this->sources[$nom_zone]["source"]=str_replace(
    				     $this->getSource($this->sources[$nom_zone]["source"],$nom_fils,0),
    				     "|$nom_fils|",
    				     $this->sources[$nom_zone]["source"]
    				     );
         // Teste si la zone $nom_fils n'existe pas plusieurs fois dans la zone $nom_zone
         if (count(explode("|$nom_fils|",$this->sources[$nom_zone]["source"]))>2) exit($this->error(6,$nom_fils,"PARSE4",1));
       }// fin While
    
    return 1;
    }
    
    /****************************************************************
    	    Session Management functions ( SMF 1.0 )
     ****************************************************************/
    
    function createSession($handle,$zone = "|root|"){
    // Create a new session of the zone
    $this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
    
    // Create sub-zone
    if (@count($this->sources[$zone]["fils"])){
       foreach($this->sources[$zone]["fils"] as $subzone){	  
        $this->createSession($handle,$subzone);
        $this->sessions[$handle][$zone]->addSubZone($this->sessions[$handle][$subzone]);
       }
    }
    				  
    //end createSession
    }
    
    
    /****************************************************************
    	    Global Variable Management Functions ( GVMF 1.0 )
     ****************************************************************/
    
     function setGZone($handle,$zone,$var,$value){
     // Define Global var for $zone and its sub-zone.
       // Set global value to $zone vars.
      return $this->sessions[$handle][$zone]->setGlobalVar($var,$value);
    }
    
    function setGFile($handle,$var,$value) {
      return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
    }
    
    function setGAll($var,$value){
    $declare = 0;
    $this->v_global[$var]=$value;
    if (is_array($this->sessions)){
        foreach($this->sessions as $handle => $v){
    		$declare = $this->setGFile($handle,$var,$value) || $declare;
    		}	
      } 
    return $declare;
    }
    
    function setGOpened($handle){
    // Set Global var into the opened file
    foreach($this->v_global as $name => $val){
      $this->setGFile($handle,$name,$val);
    }
    return 1;
    }
     
    // Fin VTemplate_Private
    }
    
    
    class VTemplate extends VTemplate_Private{
    /****************************************
    *	   var Class.		*
    * ***************************************/
    
    
    /****************************************************************
    	    Core Functions 
    *****************************************************************/
    
    
    function Open($nomfichier){
    // Ouverture d'un fichier source et retourne le handle de ce fichier
    // Création du handle:
    $handle =  "{".count($this->sessions)."}" ;
    
    
    // Récupération du source à parser
    if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1);
    if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1);
    if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1);
    clearstatcache();
    fclose($f_id);
    
    // Store the filename
    $this->file_name[$handle]=$nomfichier;
    
    // Parse les zones
    $this->parseZone($source);
    
    // Création du tableau de session
    $this->createSession($handle);
    
    //Nettoyage des variables temporaires
    $this->sources=NULL;
    
    // Set global var.
    $this->setGOpened($handle);
    
    $this->addSession($handle);
    return $handle;
    }
    
    function newSession($handle="{0}",$nom_zone = "|root|"){
    if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
    $this->addSession($handle,$nom_zone,$cache,$time,$num_session);
    return 1;
    }
    
    function addSession($handle="{0}",$nom_zone = "|root|"){
    	// Does the zone exist ?
       if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT4",1);   
       $this->sessions[$handle][$nom_zone]->init();
       return 1;
    }
    
    function closeSession($handle="{0}",$nom_zone = "|root|"){ 
    // Close the current session and all his sub-session
    	  // Check if the zone exists.
    	if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT5",1);
         // Closing sub-zone
         $this->sessions[$handle][$nom_zone]->closeSession();	
       return 1;
    }
    
    function setGlobalVar($arg1,$arg2,$arg3){
    if ($arg1 == 1){
      if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1);
      return 1; 
    }
    if (!isset($this->sessions[$arg1])) return $this->error(13,$arg1,"TTT7",1);
     $tab=explode(".",$arg2);
     if (count($tab)==1){
        if (!$this->setGFile($arg1,$arg2,$arg3)) return $this->error(14,array($this->file_name[$arg1],$arg2),"TTT8",1);
     }
     else if (count($tab==2)){
        if (!isset($this->sessions[$arg1][$tab[0]])) return $this->error(11,array($tab[0],$this->file_name[$arg1],"TTT9",1));
        if (!$this->setGZone($arg1,$tab[0],$tab[1],$arg3)) return $this->error(15,array($this->file_name[$arg1],$tab[0],$tab[1]),"TTT10",1);
     }
    return 1;
    }
    
    function setVar($handle,$zone_var,$val){
     // Fill the variable
    $tab=explode(".",$zone_var);
     if(count($tab)==2){
       $zone=$tab[0];
       $var=$tab[1];
     }
     else
     {
      $zone="|root|";
      $var=$tab[0];
     }
    
     // Teste l'existence de la zone dans la liste
     if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1);
    
     //Enregistre la variable
     return $this->sessions[$handle][$zone]->setVar($var,$val);
    }
    
    function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){
    	if($this->sessions[$handle_source][$zone_source]->used == 1) $this->closeSession($handle_source,$zone_source);
    	  $this->setVar($handle_dest,$zone_var_dest, $this->sessions[$handle_source][$zone_source]->generated);
    }
    
    function setVarF($handle,$zone_var,$file){
    // Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable.
    $tab=explode(".",$zone_var);
    
    // Récupération nom de la zone et de la variable.
     if(count($tab)==2){
       $zone=$tab[0];
       $var=$tab[1];
     }
     else
     {
      $zone="|root|";
      $var=$tab[0];
     }
    // Teste l'existence de la zone dans la liste
     if (!is_object($this->sessions[$handle][$zone])) return $this->error(11,array($handle,$zone),"TTT12",1);
    
     // Récupération du source à lire
    if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1);
    if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1);
    if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1);
    clearstatcache();
    fclose($f_id);
    
    //Enregistre la variable
    return $this->sessions[$handle][$zone]->setVar($var,$val);
    }
    
    
    
    
    
    function isZone($handle, $zone="|root|") 
    { 
    return isset($this->sessions[$handle][$zone]) ; 
    } 
    
    function Display($handle="{0}",$display=1,$zone="|root|"){
    	$this->closeSession($handle,$zone);
    	$c_genere = $this->sessions[$handle][$zone]->generated; 
    	
    	if ($display) echo $c_genere; else return ($c_genere);
    }
    //fonction complementaire version BETA
    
    /*
    * 
    On peut l'utiliser : 
    - SetVarTab($array): tout les couples clef/valeur sont valorisées 
    - SetVarTab($array,$index) seuls les couples clef/valeur dont la clef est dans le tableau index ou dont la valeur == $index (si pas tableau) 
    Si $index contient ou est une clef de type zone.clef, la clef sera extraite du texte est servira d'index pour $array 
    
    Vincent 
    */
    
    function setVarTab($handle,$zones,$index = array()){ 
    	if (is_array($index)) 
    	{ 
    		if (count($index)>0) 
    		{ 
    			reset($index); 
    			while (list (, $key) = each ($index)) 
    			{ 
    				$tab=explode(".",$key); 
    				if(count($tab)==2){ 
    					$var=$tab[1]; 
    				} 
    				else 
    				{ 
    					$var=$tab[0]; 
    				} 
    				setVar($handle,$key,$zones[$var]); 
    			} 
    		} 
    		else 
    		{ 
    			reset($zones); 
    			while (list ($key, $val) = each ($zones)) 
    			{ 
    				setVar($handle,$key,$val); 
    			} 
    		} 
    	} 
    	else 
    	{ 
    		setVar($handle,$index,$zones[$index]); 
    	} 
    } 
    
    function setGlobalVarTab($handle,$zones,$index = array()){ 
    
    	if (is_array($index)) 
    	{ 
    		if (count($index)>0) 
    		{ 
    			reset($index); 
    			while (list (, $key) = each ($index)) 
    			{ 
    				$tab=explode(".",$key); 
    				if(count($tab)==2){ 
    					$var=$tab[1]; 
    				} 
    				else 
    				{ 
    					$var=$tab[0]; 
    				} 
    				setGlobalVar($handle,$key,$zones[$var]); 
    			} 
    		} 
    		else 
    		{ 
    			reset($zones); 
    			while (list ($key, $val) = each ($zones)) 
    			{
    				GlobalVar($handle,$key,$val); 
    			} 
    		} 
    	} 
    	else 
    	{ 
    		setBlobalVar($handle,$index,$zones[$index]); 
    	} 
    } 
    
    
    
    
    
    
    // End VTemplate
    }
    $DEFINE_VTEMPLATE = 1;
    }
    ?>
    
    



    -
    Edité par GwL 16 septembre 2020 à 0:50:20

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2020 à 11:52:25

      J'avais déjà lu ça et cette histoire de static, j'en fais quoi ?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        16 septembre 2020 à 12:16:39

        Rien ; ne lis que la section dont j’ai posté l’URL.
        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2020 à 13:43:37

          Bonjour,

          Manque de recherche

          La question que vous posez démontre un manque de recherche évident.

          Je vous invite à effectuer de vraies recherches qui sont à la base d'un bon apprentissage…

          Traduction de l'erreur:

          Obsolète: les méthodes portant le même nom que leur classe ne seront pas des constructeurs dans une future version de PHP

          La documentation PHP, lien de MatTheCat:

          Les classes qui implémentent une méthode __construct() ne sont pas affectées par ce changement

          Donc il te faut trouver dans ton code une classe qui a comme constructeur une méthode portant le nom de la classe ...

          -
          Edité par Benzouye 16 septembre 2020 à 13:46:47

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            17 septembre 2020 à 3:20:50

            Je vais précisé ma demande parce que je pense qu'on ne s'est pas bien compris. Je ne suis pas un expert en dev php ou dev objet et je ne souhaite pas l'être. J'utilise quelques classes php quand la documentation jointe me permet de le faire pour faire de petits sites pour faire plaisir à mon entourage ou pour des besoins perso.

            Les histoires de constructeur,  de static, de construct(), je ne sais pas ou ça doit n’emmener mais je n'y suis pas du tout. Je le redis mes connaissances en php sont insuffisantes. J'utilise cette classe depuis très très longtemps car elle répond a mes attentes et est très très simple d'utilisation avec une documentation en français jointe.

            Je demande simplement si quelqu'un saurait la modifier si ce n'est pas trop compliqué ou m'indiquer une classe similaire qui pourrait la remplacer.

            MatTheCat comprenez que vous avez une connaissance que je suis loin d'avoir

            Benzouye La question ne démontre pas un manque de recherche mais un manque de connaissances, d'ailleurs je l'ai indiqué. Je vous remercie m'inviter a faire de vrai recherches pour un bon apprentissage mais il faudrait me dire ou j'ai indiqué que je souhaitai me lancer dans l'apprentissage de la programmation objet au point de modifier ou créer des classe objets.

            En ce qui concerne la class vTemplate

            Mon manque de recherche ne m'a pas permis de voir 4 class dans le fichier vTemplate.class.php

            • Class Err
            • Class Session
            • Class VTemplate_Private
            • Class VTemplate

            de voir que la seule fonction identique a la classe est

            • Session

            D'essayer un peu au hasard de remplacer session par construct, par new, par je ne sais plus quoi d'autres sans arriver a quelques choses de fonctionnel.

            Sachez aussi que par mon manque de recherche, j'ai aussi essayé de contacter les 2 créateurs de cette classe à plusieurs reprises sans réponses à ce jour. Les mails n'existent plus ainsi que la plupart des sites utilisés au moment de la création de la classe.

            MatTheCat Si vous avez un moment pour me répondre je vous en saurais gré 

            Benzouye De votre part je n'attends aucune réponses et je m'excuse par avance d'un tel affront d'avoir posté avec un tel manque de recherche !

            • Partager sur Facebook
            • Partager sur Twitter
              17 septembre 2020 à 5:23:49

              Tu as une autre solution, ne pas upgrader la version de php pour ce serveur.
              • Partager sur Facebook
              • Partager sur Twitter
                17 septembre 2020 à 9:01:48

                christouphe a écrit:

                Tu as une autre solution, ne pas upgrader la version de php pour ce serveur.


                Et avoir des problèmes de sécu ? :)

                GwL a écrit:

                Je ne suis pas un expert en dev php ou dev objet et je ne souhaite pas l'être

                 C'est surtout ça que je comprends pas. Est-ce qu'un mec peut se dire : "Je construits des maisons pour mes proches ou moi-même mais je ne veux pas me mettre à jour sur les dernières normes qui font que les maisons ne s'écroulent pas ou n'auront pas de problème car l'electrécité est mal faite ?"

                Ce qui est dit est pour moi exactement pareil. Si on fait du dev on le fait du mieux qu'on peut ou pas du tout. Je ne parle pas d'apprendre tout sur les objets, le php ou quoi que ce soit, mais juste se tenir à jour par rapport à ce que l'on utilise. Et faire du code propre que ce soit visuellement ou côté sécurité.

                Car le code au dessus je sais pas si c'est comme ça vraiment ou l'éditeur de OCR qui est mal mis mais si c'est comme ça qu'il est vraiment ton code alors juste un petit reindent all de ton éditeur / ide suffirait à le rendre plus lisible

                (ça ma prix exactement 10 sec de copier coller et formatter le code avec vscode : https://hastebin.com/betodeluna.xml )

                • Partager sur Facebook
                • Partager sur Twitter
                  17 septembre 2020 à 10:09:57 - Message modéré pour le motif suivant : Message complètement hors sujet


                    17 septembre 2020 à 10:52:09

                    GwL a écrit:

                    Je ne suis pas un expert en dev php ou dev objet et je ne souhaite pas l'être

                    Ok, mais là il faut mettre un minimum les doigts dans le camboui ...

                    GwL a écrit:

                    Benzouye De votre part je n'attends aucune réponses et je m'excuse par avance d'un tel affront d'avoir posté avec un tel manque de recherche !

                    Et cela ne sert à rien d'être susceptible sur un forum ... nous ne sommes pas devin sur ton engagement face à la programmation, ni sur ce que tu as déjà essayé de faire avant de poster ...

                    D'autant que j'avais apporté des éléments de réponse ... visiblement insuffisant ... je reformule :

                    Le message d'erreur te dit qu'une classe PHP a une méthode constructeur qui porte le même nom que la classe, ce qui est obsolète. Dans ces classes, il te faut remplacer le nom du constructeur par __construct().

                    Donc il faut trouver dans ton code une classe dont le nom est le même que sa fonction (méthode) constructeur. Exemple :

                    class MaClasse () {
                        ...
                        function MaClasse() {
                            ...
                        }
                        ...
                    }

                    Ce n'est pas le cas dans le code que tu as posté, donc ce doit être ailleurs dans d'autres classes ... Avec un éditeur de texte recherche le mot "class" dans tout ton code, et pour chaque occurrence regarde le nom de la classe, et regarde si une fonction qu'elle contient porte le même nom ... si oui, remplace ce nom par __construct().

                    Si cela est hors de ta portée, rapproche toi d'un développeur de ton entourage pour qu'il le fasse ...

                    -
                    Edité par Benzouye 17 septembre 2020 à 10:55:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      17 septembre 2020 à 21:22:17

                      christouphe 

                      Dans un premier temps, c'est exactement ce que j'ai fait mais il est évident qu'un moment les anciennes versions de Php seront de moins en moins maintenues par les hébergeurs de sites et le problème va à nouveau se poser.

                      quenti77 

                      Je ne peux pas être d'accord avec tout ce que tu dis. on peut être passionné de voitures (conduite par ex) sans pour autant vouloir être mécano. On peut connaitre le principe général d'un moteur mais ne pas être capable de réparer. J'utilise les classes Php pour le fonctionnel qu'elles apportent. Je lis les documentations jointes rigoureusement pour utiliser la classe du mieux possible.

                      Pour ce qui du code, à la base je l'ai posé tout formaté mais le forum à modifié l'indentation. hastebin.com je ne connaissais pas.

                      Benzouye

                      C'est bien ça le soucis, il n'y a pas de constructeur du même nom. dans la classe vTemplate, il n'y a pas la fonction vTemplate.

                      La façon d'utiliser la classe n'en dis pas plus

                      // utilisation de la classe
                      
                      require("vTemplate.class.php");
                      
                      $MonTemplate = new vTemplate;
                      $MonHandle = $MonTemplate->Open ( MonfichierTPL.php);
                      //
                      //
                      // on fait notre sauce sur l'utilisation du template
                      // en travailant sur $MonHandle
                      //
                      
                      echo $MonTemplate->display( $MonHandle );

                      le code n'est pas complet, c'est juste pour montrer le principe. 

                      • on charge la classe avec le require.
                      • on crée notre objet vtemplate si j'ai bien compris.
                      • on charge le modèle de template sur lequel on doit travailler.
                      • on affiche le résultat avec la fonction display.


                      La construction se fait au moment du new vTemplate

                      Quand je regarde dans la classe, il y a pas de new, pas de fonction vTemplate, pas de construct etc ..

                      Quand j'essai de fouiller dans la classe, ça me donne l'impression de lire un truc en arabe, c'est le nuage total.

                      Néanmoins j'ai vu que vTemplate héritait de VTemplate_Private dans lequel il n'y a pas de vtemplate ou de VTemplate_Private, de construct etc ...

                      Comprenez que c'est pas un manque de volonté c'est juste que j'ai jamais réussi à appréhender la programmation oo.

                      Perso j'ai débuté avec le C et j'ai même travaillé sur des projets assez sensible. Le jour ou on m'a envoyé en formation pour le c++, j'ai commencé à sérieusement à me gratter la tête et je n’ai jamais réussi à assimiler ça. Je vous évite les mésaventures qui en on suivi.

                      Aujourd'hui je me dis que pour quelqu'un qui maîtrise ce sujet ça doit pas être très compliqué de modifier cette classe pour qu'elle réponde aux nouvelles conditions de php.

                      Si cela est vraiment trop compliqué alors je vais m'orienter vers un nouveau système de template et les retours d'expériences sont les bienvenues.

                      Merci à vous.

                      -
                      Edité par GwL 17 septembre 2020 à 21:26:19

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 septembre 2020 à 21:33:42

                        GwL a écrit:

                        C'est bien ça le soucis, il n'y a pas de constructeur du même nom. dans la classe vTemplate, il n'y a pas la fonction vTemplate.

                        La façon d'utiliser la classe n'en dis pas plus


                        En fait oui,

                        Tu en as une dans la classe Session ;)

                        Apres les "var $variable" ça passe encore c'est traduit par "public $variable"

                        -
                        Edité par Infoxp 17 septembre 2020 à 21:35:42

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Infoxp ici depuis 2007
                          18 septembre 2020 à 11:13:58

                          GwL a écrit:

                          Quand je regarde dans la classe, il y a pas de new, pas de fonction vTemplate, pas de construct etc.

                          La classe Session a bien une méthode nommée Session ... ligne 129 de ton code posté au départ ... Remplace ce Session par __construct() :

                          class Session extends err {
                          	var $name;      // Name of the session
                          	var $globalvar = array();  // List of global variable of the session
                          	var $varlist = array();  // List of vars in this session
                          	var $subzone = array(); // list of sub-zone
                          	var $temp; // Generated code for the current session
                          	var $generated = NULL; // The final code
                          	var $source; // Source code
                          	var $used=0; // Indicates if the session contain used variable
                          	var $stored; // Give the filename were is stored the session
                          	
                          	function __construct($name,$source,$stored) {
                          		$this->name = $name;
                          		$this->source = $source;
                          		$this->stored = $stored;
                          		$this->parseVar();
                          	}
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            28 septembre 2020 à 22:48:22

                            J'ai pris un peu de temps pour répondre. le travail, la vie de famille nous laisse pas toujours le temps de faire  ce qu'on veut :)

                            Je viens de test et effectivement ça n'affiche plus le message. J'avais testé ça, il y a un moment déjà et ça criait partout. Je suppose que j'avais du laisser des modifs par ci par la de mes test précédent.

                            Même si je comprend pas trop le rôle du construct dans session, je vous remercie bien.

                            Il doit surement exister mieux que cette classe mais je la trouve vraiment génial. Elle est très très facile d'utilisation et permet pas mal de choses.

                            J'espère que ça servira pour d'autres.

                            Encore merci à vous. :)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 septembre 2020 à 8:21:17

                              Le rôle de la méthode __construct est de pouvoir instancier la classe en objet, quelque soit la classe.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 septembre 2020 à 8:41:34

                                J'ai regardé ce que faisait ce fichier et au final le mieux je pense serait de partir sur un autre système de template plus à jour comme twig ou blade. Car au final ce que te permet la classe c'est exactement ça.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 septembre 2020 à 13:22:35

                                  Blade ça me semble un peu compliqué pour moi mais twig je vais essayer de voir de plus près.

                                  Merci :)

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Modification de class

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown