[ Goran Rakić @ 27.07.2003. 03:29 ] @
Naime imam po sve jednostavan ali trenutno za mene ne rešiv problem. Kada imate varijablu $jedan, vi joj mozete pristupiti i preko ${'jedan'}. E sada meni to treba, ali za niz. Imam _POST i _GET nizove i ja hoću da prenesem ime niza i ime indeksa kao parametre. Ukoliko stavim ${'_GET'}[$var], to radi, dok ako stavim ${'_'.$niz}[$var], to ne radi - dobijem poruku da je _GET nedefinisana varijabla. Zašto?
[ bOkIcA @ 27.07.2003. 04:30 ] @
nije me mrzelo, probao sam i kod mene radi bez problema

Code:
<?php

$_TEST['aaa'] = "nesto prvo";
$_TEST['bbb'] = "drugo hocemo";
 
$glavna = "TEST";
$druga = "bbb";

print ${'_'.$glavna}[$druga]; // to radi bez problema

// rezultat:
// drugo hocemo

?>


PHP/4.0.6
PHP/4.2.3
[ bOkIcA @ 27.07.2003. 04:34 ] @
radi i ovo
Code:
<?php
$glavna = "SERVER";
$druga = "SCRIPT_FILENAME";
print ${'_'.$glavna}[$druga];
?>


kao i _GET
[ Goran Rakić @ 27.07.2003. 13:39 ] @
a ovako?

Code:

<?php

    $array = 'GET';
    $key = 'a';
        
    // ovo radi...
    echo('<hr>1. Direktno...<br>');    
        echo('Niz: '.$array.'<br>');
    echo('Kljuc: '.$key.'<br>');
    echo ('Vrednost: '.${'_'.$array}[$key].'<br>');

      function readvalue($key,$array)  {
                echo('<hr>2. Iz funkcije...<br>');
                echo('Niz: '.$array.'<br>');
        echo('Kljuc: '.$key.'<br>');
        echo('Vrednost: '.${'_'.$array}[$key].'<br>');
        
        // i ovo radi...
        echo('<hr>3. Direktan pristup iz funkcije (jeste globalna varijabla)<br>');
        echo('Vrednost: '.$_GET[a].'<br>');
      } 

      // ovo nece
      readvalue('a','GET');
      
?>


Generisanje imena radi van funkcije, direktan pristup radi u funkciji i van funkcije, dok generisanje imena u funkciji ne radi.
[ CONFIQ @ 27.07.2003. 18:54 ] @
Eee našao si bug u PHPu :Đ
Malo sam se poigrao ovim zato što me zanimalo i izgleda da je problem sa super promenljivim u funkcijama...

Kód sam za sebe govori:

Code:
<pre>
<?
ini_set('display_startup_errors',1);
ini_set ('error_reporting', E_ALL);
$array = 'GET';
$key = 'a';
    
// ovo radi...
echo "<hr>1. Direktno...
Niz: $array
Kljuc: $key
Vrednost:". ${'_'.$array}[$key];
function readvalue($array,$key)  {
         $_A['a']='Working';
         echo "<hr>2. Iz funkcije...
         Niz: $array
         Kljuc: $key
         U arrajy: ".${'_'.$array}[$key];

readvalue('A','a'); #Obicna promenljiva i radi
readvalue('GET','a'); #super globalna promenljiva i ne radi
highlight_file('echo.php');
   
?>


demo (4.3.2RC4)

~Say FiQ
[ -zombie- @ 28.07.2003. 01:04 ] @
koristi global da bi deklarisao da je $_GET globalna promenjiva. (da, deluje zbunjujuće, i naravno da je hack, ali radi ;)

mrzi me da izmišljam novi primer. evo confiq-ovog

Code:

<pre>
<?php
ini_set('display_startup_errors',1);
ini_set ('error_reporting', E_ALL);
$array = 'GET';
$key = 'a';
    
// ovo radi...
echo "<hr>1. Direktno...
Niz: $array
Kljuc: $key
Vrednost:". ${'_'.$array}[$key];
function readvalue($array,$key)  {
    $global="_$array";
    global $$global;
         $_A['a']='Working';
         echo "<hr>2. Iz funkcije...
         Niz: $array
         Kljuc: $key
         U arrajy: ".${'_'.$array}[$key];

readvalue('A','a'); #Obicna promenljiva i radi
readvalue('GET','a'); #super globalna promenljiva i ne radi
highlight_file('echo.php');
   
?>


btw, ovo je moglo da se reši i sa eval() i sa $GLOBALS, i...

a ustpu, umesto prosleđivanja imena niza, zar nisi lakše mogao da proslediš sam niz ;) ili još bolje kao referencu...
[ Goran Rakić @ 28.07.2003. 01:09 ] @
evo neka moja 1500. poruka na forumu bude:

ovo sa referencom je odlična ideja (ma setio bih se ja, ali...), a sa imenom niza izgleda kriptičnije. šalu na stranu, nemam direktnu funkciju već i delove imena dobijam kao povratnu vrednost drugih metoda unutar istog objekta te mi ovakva izgranja baš treba. Rešio sam problem sa switch konstrukcijom.



[Ovu poruku je menjao Goran Rakić dana 28.07.2003. u 03:33 GMT]
[ bOkIcA @ 28.07.2003. 02:02 ] @
Citat:
Goran Rakić
evo neka moja 1500. poruka

HOLA, cetitam

[ CONFIQ @ 28.07.2003. 19:16 ] @
Citat:
-zombie-:
btw, ovo je moglo da se reši i sa eval() i sa $GLOBALS, i...



Hmmm, mislim da problem nije bio kako da se napravi nego zašto ne radi. Ipak bi ovo trebalo da bude mali bug u PHP-u pošto super-globalna bi naime trebalo da bude supernija od obične globalne (bar po meni).
Ajde nek neko postuje ovaj primer na news://news.php.net pa da vidimo šta oni misle?

~Say FiQ