Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> referencje
dtb
post 27.01.2006, 15:47:29
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


postanowilem [z nudow] napisac sobie cos w php z czego mogl byc w przyszlosci uzywac. wpadlem na pomysl - system szablonow! jednak natrafilem na pewien problem.

oto fragmet kodu:
  1. <?php
  2. function pte_parseVar (&$var, $key, &$pte)
  3. {
  4. while (preg_match('#\(([a-zA-Z0-9\.]+)\)#', $var, $x)) {
  5. $var = str_replace($x[0], $pte->getVarValue($x[1]), $var);
  6. }
  7. $var = &$pte->getVarValue($var);
  8. }
  9.  
  10. class pte
  11. {
  12. private $vars;
  13. (...)
  14. public function getVarValue ($name)
  15. {
  16. $name = explode('.', $name);
  17. $varName = NULL;
  18. foreach ($name as $v) {
  19. $varName .= '[''.$v.'']';
  20. }
  21. return eval('return $this->vars'.$varName.';');
  22. }
  23. (...)
  24. public function parse ($file)
  25. {
  26. (...)
  27. array_walk($tmp[2], 'pte_parseVar', $this);
  28. (...)
  29. }
  30. }
  31. ?>


chodzi o to, aby $tmp[2]['zm.0'] byl referencja zmiennej $this->vars['zm'][0]; itp. jednak zamiast referencji przekazana jest jedynie zawartosc tej zmiennej. gdy dodam operator & przed eval lub przed $this->vars'.$vaName to wyskakuje blad skladni. wie ktos jak to rozwiazac?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dtb
post 27.01.2006, 19:42:16
Post #2





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

Ostrzeżenie: (0%)
-----


kiedy dodam & przed getVarValue to zwraca dzieje sie tak jakby wogule nie bylo fragmetu $var = &$pte->getVarValue($var). kiedy zrobie $var = $pte->getVarValue($var), to jest tak ja wczesniej

~ EDIT:
przygotawalem taki kod, dzieki ktoremu mozna latwo sparwdzic czy mamy doczynienia z referencjami:

  1. <?php
  2. function pte_parseVar (&$var, $key, &$pte)
  3. {
  4.     while (preg_match('#\(([a-zA-Z0-9\.]+)\)#', $var, $x)) {
  5.         $var = str_replace($x[0], $pte->getVarValue($x[1]), $var);
  6.     }
  7.     $var = $pte->getVarValue($var);
  8. }
  9.  
  10. class pte
  11. {
  12.     private $vars;
  13.     
  14.     public function __construct ()
  15.     {
  16.         $this->vars['zm'] = array (0 => 'lol', 1 => 'lol2');
  17.     }
  18.  
  19.     public function &getVarValue ($name)
  20.     {
  21.         $name = explode('.', $name);
  22.         $varName = NULL;
  23.         foreach ($name as $v) {
  24.             $varName .= '[''.$v.'']';
  25.         }
  26.         return eval('return $this->vars'.$varName.';');
  27.     }
  28.     public function parse ()
  29.     {
  30.         $tmp[2] = array ('zm.0', 'zm.0');
  31.         array_walk($tmp[2], 'pte_parseVar', $this);
  32.         $tmp[2] = array ('nowa_wartosc', 'nw2'); // jezeli $tmp[2] to referencja do $this->vars['zm'] to powinnismy zobaczyc na ekranie true
  33.         return $tmp[2];
  34.     }
  35.     
  36.     public function display ()
  37.     {
  38.         return $this->vars['zm'];
  39.     }
  40. }
  41.  
  42. $pte = new pte();
  43. var_dump($pte->parse() == $pte->display());
  44. ?>


Ten post edytował dtb 27.01.2006, 20:00:09


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- dtb   referencje   27.01.2006, 15:47:29
- - Wave   Spróbuj: [PHP] pobierz, plaintext <?phppublic f...   27.01.2006, 15:50:05
- - dtb   kiedy dodam & przed getVarValue to zwraca dzie...   27.01.2006, 19:42:16


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 20:35