Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: eval_html, ostre...
Forum PHP.pl > Forum > PHP
codo
Hej, znalazlem na php.net taka bardzo uzyteczna funkcje:
  1. function eval_html($string)
  2. {
  3. if(version_compare(phpversion(),\"4.3.0\")>=0) 
  4.  foreach($GLOBALS as $arraykey=>$arrayvalue) global $$arraykey;
  5.  
  6.  
  7. $eval_str=$string;
  8. preg_match_all(\"/(<?php|<?)(.*?)?>/si\", $eval_str,
  9.  $raw_php_matches);
  10. $php_idx = 0;
  11. while (isset($raw_php_matches[0][$php_idx]))
  12. {
  13. $raw_php_str = $raw_php_matches[0][$php_idx];
  14.   $raw_php_str = str_replace(array(\"<?php&#092;",\"?>\",\"<?\",\"?php>\"), \"\", $raw_php_str);
  15.  
  16. eval(&#092;"$raw_php_str;\");
  17. $exec_php_str = ob_get_contents();
  18. $eval_str = preg_replace(&#092;"/(<?php|<?)(.*?)?>/si\",
  19.  $exec_php_str, $eval_str, 1);  
  20. $php_idx++;
  21.  
  22. }
  23. return $eval_str;
  24. }

korzystam z niej do template'ow ktore maja w sobie phpa.
Problem jest taki ze gdy w ponownie parsowanym (przepuszczonym przez ta funkcje) kodzie jest jakas funkcja ktora korzysta z globali to po prostu ich nie importuje.
Czyli jesli zrobie:
  1. <?php
  2.  
  3. $x=&#092;"aaa!\";
  4. function a()
  5. {
  6.  
  7. global $x;
  8. echo $x;
  9. }
  10. ?>


to nic nie wypisze.
nospor
global musi być przed pierwszą inicjacją $x:
  1. <?php
  2.  
  3. global $x;
  4. $x=&#092;"aaa!\";
  5. function a()
  6. {
  7.  
  8. global $x;
  9. echo $x;
  10. }
  11.  
  12. ?>


anie lepiej:
  1. <?php
  2.  
  3. $x=&#092;"aaa!\";
  4. function a($x)
  5. {
  6. echo $x;
  7. }
  8.  
  9. ?>
hwao
Cytat(nospor @ 2005-07-25 10:19:22)
global musi być przed pierwszą inicjacją $x:
  1. <?php
  2.  
  3. global $x;
  4. $x=&#092;"aaa!\";
  5. function a()
  6. {
  7.  
  8. global $x;
  9. echo $x;
  10. }
  11.  
  12. ?>

Ke :?: :?:

codo: jak to nie dziala (co podałeś - chociaz dziwne... ) to proponuje zmienic sposob dostepu do informacji...
nospor
faktycznie, bez global na początku też działa. Mój błąd sad.gif
Ale z global na początku też działa biggrin.gif
codo
Nie wiem, dla mnie to ostro zagmatwane. Mam sporo zmiennych ktore przekazuje jako argumenty i wole miec akurat globala.
Cytat
global $x;
$x="aaa!";
function a()
{

global $x;
echo $x;
}

Ale to dziala jak trzeba, ale myslalem ze linijka
  1. <?php
  2.  
  3.  foreach($GLOBALS as $arraykey=>$arrayvalue) global $$arraykey;
  4.  
  5. ?>

wlasnie to robi... Mozna to jakos zautomatyzowac?
nospor
No ale przecież global $ala; zapisze do tablicy $GLOBALS. A ty robisz bardzo dziwną rzecz. pobierasz elementy tablicy $GLOBALS i spowrotem je tam zapisujesz (poprzez global)
tsufu
moze przez referencje podac do funkcji cala tablice ?
function papapa(&$dane) {
/../
}

aczkolwiek dziwne ze global nie dziala ?
codo
to jest z php.net...
to jest tylko dla nowszych php:
  1. <?php
  2.  
  3. if(version_compare(phpversion(),&#092;"4.3.0\")>=0) 
  4.  foreach($GLOBALS as $arraykey=>$arrayvalue) global $$arraykey;
  5.  
  6. ?>

Tez tego nie czaje, to po prostu nie jest dostep do wszystkich globali w srodku funkcji? Jak to wykomentuje to wszystko sie przewraca...
Dalej nie wiem jak to wszystko rozwiazac.
nospor
a, momencik. ta pętla po $GLOBALS powoduje, że w funkcji masz dostępne jako zmienne wszystkie indexy (zmienne) z tablicy $GLOBALS.
czyli jak miales $x w globals, to możesz sie do niego dobrać echo $x;
codo
no wiem, ale ja mam juz w srodku
  1. <?php
  2.  
  3. $x=&#092;"aaa!\";
  4. function a()
  5. {
  6. global $x;
  7. echo $x;
  8. }
  9.  
  10. ?>

czyli jak zautomatyzowac:
  1. <?php
  2.  
  3. global $x;
  4. $x=&#092;"aaa!\";
  5. function a()
  6. {
  7.  
  8. global $x;
  9. echo $x;
  10. }
  11.  
  12. ?>

dla kazdej/wielu zmiennych globalnych
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.