[PHP]Include in aparte namespace

Pagina: 1
Acties:
  • 136 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Op dit moment werk in met Smarty templates. Hier wil ik eigenlijk vanaf, omdat het in principe prima in php valt te doen (en ik meer tegen nadelen dan voordelen aanloop). Nu wil ik eigenlijk eenzelfde soort methode hanteren als ik bij Smarty deed. Even voor de volledigheid:
Oud
PHP:
1
2
3
$template = new template();
$template->assign($foo, "variabele");
$template->display();
En de template:
code:
1
2
3
4
5
<html>
<body>
<p> {$variabele} </p>
</body>
</html>
Nieuw
Wat ik dus zou willen:
PHP:
1
2
3
$template = new template();
$template->assign($foo, "variabele");
$template->display();
PHP:
1
2
3
4
5
<html>
<body>
<p> <?=$variabele?> </p>
</body>
</html>


Ik zou denken dat ik in mn backend een aantal variabele toewijs, en daarna de template include. Echter, volgens de php standaard haalt een geïnclude bestand alle variabelen uit de global namespace. In het laatste geval moet $variabele dus in een global namespace te vinden zijn, maar dat wil ik niet! Ik wil dat voor het geïnclude bestand er een aparte namespace wordt aangemaakt. Dit komt omdat er binnen mijn cms een aantal gereserveerde variabelen zijn ($functions, $plugin, $database, $config etc) en die moet je dus niet overschrijven.
Een klasse aanmaken om een namespace te creëren is een mogelijkheid, maar dan hou je imho geen template meer over en wordt het nog steeds veel OOo php geneuzel. Het moet simpel en makkelijk om te zetten zijn.

Hoe kan ik netjes een php template bouwen, zonder variabelen in de global namespace te hoeven zetten?

Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik gewoon de functie scope. Er is niemand die zegt dat de scope binnen een geïnclude bestand de global scope moet zijn. Include het bestand vanuit een functie en je hebt het hele probleem niet.

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Wat je wil is prima mogelijk.
In de display() functie van je Template klasse loop je gewoon door alle gedefineerde variabelen en kopieer je deze naar je functie scope. Vervolgens include() je de template en klaar is mithras. :)

edit:

Spuit 11

[ Voor 5% gewijzigd door --MeAngry-- op 29-12-2007 12:30 ]

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • Muthas
  • Registratie: December 2005
  • Niet online

Muthas

O+

Waarom niet alles in een array zetten?

PHP:
1
2
3
4
5
$data = array(
  'name' => $username,
  'result' => $result
);
$template->display($data);

HTML:
1
2
3
4
5
6
<html>
<body>
<p> <?=$username?> </p>
<p> <?=$result?> </p>
</body>
</html>


Moet je alleen even zorgen dat die troep uit de array gewoon bij de naam kan echo-en.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
@Cheatah & --MeAngry--: Waarom dacht ik dat een geinclude bestand *niet* in de functie scope zat:
When a file is include()ed, the code it contains inherits the variable scope of the line on which the include() occurs. Any variables available at that line in the calling file will be available within the called file. If the include() occurs inside a function within the calling file, then all of the code contained in the called file will behave as though it had been defined inside that function.
:X |:(

Dan is mijn probleem eigenlijk al weer opgelost 8)7

@Muthas: Intern zou je dat zo kunnen oplossen, echter vind ik het niet netjes en kan je het beter directer doen dmv waarden aan variabele toewijzen.