Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> eval_html, ostre..., globale nie chodza...
codo
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
hwao
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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...
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
codo
post
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tsufu
post
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 12.07.2004

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


moze przez referencje podac do funkcji cala tablice ?
function papapa(&$dane) {
/../
}

aczkolwiek dziwne ze global nie dziala ?
Go to the top of the page
+Quote Post
codo
post
Post #8





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
codo
post
Post #10





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 31.10.2004

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


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
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 18:09