[PHP]Problem z klasa parsowania TPL

Witam!

Dzisiaj mi się nudzilo i postanowilem napisac klase ktora parsowala by HTML jednak gdy tylko includne plik z klasa strona zaczyna sie wczytywac i w sumie na tym konczy - znaczy caly czas sie wczytuje i nic nie robi.

Plik classy:

<?php

	class tplEngine	{

		private $variable,$cache,$ids,$tplDir;

		public function __construct($tplDir)	{

			$this->tplDir=$tplDir;

		}

		public function set($name,$value)	{

			$this->variable[$name]=$value;

		}

		public function clear()	{

			$this->variable=array('tplDir'=>$this->tplDir);

		}

		public function showHTML($class,$id)	{

			if (eregi('[0-9]',$class)&&eregi('[0-9]',$id)&&isset($this->cache[$class][$id]))	{

				echo $this->cache[$class][$id];

				return True;

			}

			else	{	echo 'SHOWTPL ERROR!'; return False;	}

		}

		public function parseTPL($tplFile,$class)	{

			//Sprawdzanie czy plik instnieje

			$parseFile=$this->tplDir.$tplFile.'.tpl';

			if (eregi('[0-9]',$class)&&eregi('[0-9a-zA-Z]',$tplFile)&&file_exists($parseFile))	{

				$parseSize=filesize($parseFile);

				if ($parseSize>0)	{

					$tplF=fopen($parseFile,'r');

					$tplC=fread($tplF,$parseSize);

					preg_match_all("#\{\$(.*?)\}#", $parse, $i0); //Wyszukiwanie zmiennych do parsowania

					$i1=count($i0);$i2=0;

					while ($i2<$i1)	{

						$tplVar=$i0[0][$i2];

						$parsed=preg_replace('#\{\$'.$tplVar.'\}#',$this->variable[$tplVar],$parsed);

						$i2++;

					}

					fclose($tplF);

					$this->ids[$class]++;

					$i3=$this->ids[$class];	

					$this->cache[$class][$i3];

					unset($parseFile,$class,$tplFile,$parseSize,$tplF,$tplC,$tplVar,$parsed,$i0,$i1,$i2);//Kasowanie zmiennych

					$this->clear();

					return $i3;

				}

			}

			else	{	return 'PARSETPL FILE NOT EXIST!';	}

		}

	}

?>

Pozdrawiam Crop

Na dzień dobry dwa błędy:

tplDir - nie zadeklarowałeś tego jako właściwość klasy, a odwołujesz się przez $this.

else { return False; echo 'SHOWTPL ERROR!'; }

To echo już się nie wykona, po return kończy się działanie tej metody.

Masz włączone wyświetlanie błędów w php?

Deklaruje ja przy uruchamianiu klasy i teraz dodalem ja do private,

poprawilem blad ktory pokazales.

Poprawilem troche i teraz normalnie sie wczytuje jednak gdy wywoluje klase strona znowu zaczyna sie ladowac w czasie oo,

$tpl=new tplEngine(tplsDir.$core->loadSettings('template').'/');

-------------EDIT----------- Juz wszystko ok0, dziekuje za pomoc:D poczatkowo byl blad w klasie parsujacej, ale gdy zostal naprawiony odezwal sie bug w klasie ladujacej ustawienia; Zeby nie bylo zanim dodalem ten post zamiast

$tpl=new tplEngine(tplsDir.$core->loadSettings('template').'/');

bylo

$tpl=new tplEngine(tplsDir.'test/');

i gdy znowu ustawilem katalog tplek recznie all jest ok0:d

Jeszcze raz dzieki za pomoc:)

Pozdrawiam Crop

a od kiedy php wymaga deklarowania zmiennych przed ich wywołaniem?

Crop , ogólnie ta linia wygląda jakoś strasznie, co ona w ogóle miała robić?

P.S.

W php występują dwa typy wyrażeń regularnych, PCRE i POSIX, Ty mieszasz strasznie jedne i drugie, warto to przemyśleć, zwłaszcza, że te POSIXowe wylatują standardowo z php przy okazji ver. 6

Fakt, nie wymaga, zagalopowałem sie troche z moimi “widzimisię”.

Po prostu uważam, że właściwości klasy powinny być definiowane wcześniej, chociaż nie jest to wymagane przez php.

Poza tym PRCE są dużo szybsze.

Heh no ok0:D

Powiedzmy ze chce zastosowac wyrazenia regularne PRCE(?).

Teraz jak zamienic:

#{(.*?)}#

W taki sposob aby zracalo mi Test a nie {Test}

??

Dobra olac to…

PS. Jesli chodzi Ci o linie

$tpl=new tplEngine(tplsDir.$core->loadSettings('template').'/');

To uruchamia ona klase tplEngine ustawiajac w niej zmienna $tplDir na wartosc ze stalej tplsDir i z wartosci pobranej z bazy danych konkretnie ustawienia i pobranie wartosci ustawienia template.:smiley: