[PHP] $this->var naar $var

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 12-09 13:07
Ik wil in mijn eigen PHP framework gebruik maken van templates, maar nu is de bedoeling dat ik alles via een mvc doe. Echter loop ik nu tegen het volgende probleem aan.

In de actions van mijn class wil ik een variabele declareren, dit doe ik dmv $this->varName = 'schaapjes';
Echter wil ik nu in mijn templates deze variabele aan kunnen roepen met $varName, dus zonder $this ervoor. Ik weet dat het mogelijk is aangezien symfony dit ook kan, echter heb ik nog niet uit kunnen vinden hoe dit in symfony gedaan word..

Weet iemand hoe dit moet?

Acties:
  • 0 Henk 'm!

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

On track


Acties:
  • 0 Henk 'm!

Verwijderd

Nou even heeel snel:
PHP:
1
2
3
4
5
$vars = get_object_vars($this);
foreach($vars as $key => $value) {
    global $$key;
    $$key = $value;
}

Héééél erg dirty :P

Edit: De global kun je ook weglaten als je de variabelen alleen binnen de functie wil gebruiken. En dan kun je inderdaad ook extract() gebruiken.

[ Voor 42% gewijzigd door Verwijderd op 06-05-2010 18:22 ]


Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
Met extract() is minder dirty, dan kan dat loopje weg. Bijvoorbeeld zo:

PHP:
1
2
3
4
<?php
$vars = get_object_vars($this);
extract($vars, EXTR_PREFIX_SAME, "this");
?>


Dat zou moeten werken.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Je kan evt van je klasse nog een ArrayObject maken, dan krijg je dit:
PHP:
1
2
3
$vars['mijnvarname'];
ipv 
$vars->mijnvarname;

Acties:
  • 0 Henk 'm!

  • Serenity
  • Registratie: Oktober 2005
  • Laatst online: 14-01-2023
Het is ook handig om variabelen die je in je view gebruikt te scheiden van de rest. Bijvoorbeeld __set gebruiken in je hoofd-controller:

PHP:
1
2
3
protected function __set($key,$value) {
  $this->variables[$key] = $value;
}


In elke pagina-controller kun je dan gewoon variabelen setten:

PHP:
1
$this->foo = 'bar';


En die worden verzameld in $this->variables. Dan als je uiteindelijk de view laadt ervoor zorgen dat deze variabelen beschikbaar zijn:

PHP:
1
2
3
if (is_array($this->variables)) {
  extract($this->variables);
}


En in de view is het dan aan te roepen op de manier die je wilt:

PHP:
1
echo $foo; // bar
Pagina: 1