Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmienne superglobalne, Dlaczego tak nie dziala ?
Bastion
post
Post #1





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


czy ktos wie dlaczego dziala tak :

  1. <?php
  2.  $tablica = array(0,1,2,3,4);
  3.  $el = 'tablica';
  4.  print_r(${$el});
  5.  
  6. ?>


a nie dziala tak :

  1. <?php
  2. $el = '_SERVER';
  3. print_r(${$el});
  4. ?>


Ten post edytował Bastion 10.03.2006, 08:41:58
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




ale co ci nie dziala?
  1. <?php
  2.  
  3. $el = '_SERVER';
  4. print_r(${$el});
  5.  
  6. ?>
Bo mi dziala.

Moze nie masz tablicy $_SERVER ? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
Bastion
post
Post #3





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


faktycznie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ale tfu mialo byc tak :

  1. <?php
  2. function foo()
  3. {
  4. $el = '_SERVER';
  5. print_r(${$el});
  6. }
  7.  
  8. foo();
  9. ?>

nie zadziala

ale to tak :
  1. <?php
  2. function foo()
  3. {
  4. print_r($_SERVER);
  5. }
  6.  
  7. foo();
  8. ?>


tzn dopiero dziala po zastosowaniu czegos takiego

  1. <?php
  2. function foo()
  3. {
  4. $el = '_SERVER';
  5. global ${$el};
  6. print_r(${$el});
  7. }
  8.  
  9. foo();
  10. ?>


ale czy powinno tak sie dziac ze bez globala nie lapie?

Ten post edytował Bastion 10.03.2006, 08:54:21
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Może to ma związek z tym:

Zmienne zmienne
Cytat
Proszę pamiętać, że zmienne zmienne nie mogą być używane z nowymi superglobalami php. Oznacza to, że nie będą działać wyrażenia typu ${$_GET}. Jeśli szukasz sposobu na obsługę osiągalności superglobali i starych tablic $HTTP_*_VARS, spróbuj użyć referencji.

Niby piszą o troszkę innej rzeczy ale nadal w ogrębie tablic superglobalnych. Może po prostu tak się nie da :/
Choć trochę w to wątpię.
Go to the top of the page
+Quote Post
Bastion
post
Post #5





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


no to kasza (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a mike powiedz mi sa jakies przeciwskazania jesli uzyje tego globala ?
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Bastion @ 2006-03-10 09:10:18)
no to kasza (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a mike powiedz mi sa jakies przeciwskazania jesli uzyje tego globala ?

Po konstrukcji widzę że nie za bardzo masz możliwość przekazania superglobali w argumentach funkcji przez referencję, więc ten global może być tutaj jedynym wyjściem.

Choć ja jestem zawsze przeciwny stosowaniu globali, one nie są zgodne z ideą OOP.

Jeśli faktycznie jest kasza, to nie masz chyba wybru. Ale nie jestem tego pewnien, sprawdź to, ja tylko zwróciłem uwage, że może to php daje ciała. Pewności nie mam.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




Ale ja zadam glupie pytanie:
Ale po co ci wogole robic to przez zmienną zmienną? Przecież $_SERVER jest jeden. On sie nie zmienia. Zawsze wywolasz $_SERVER, a nie $_SERVER1
Go to the top of the page
+Quote Post
Bastion
post
Post #8





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


nospor: masz racje, ale pisze taki hm "firewall" zmiennych przekazywanych przez _GET, _POST etc,

mniejwiecej tak ,
  1. <?php
  2. $firewall -> register('_GET', 'parametr', 'chars_only');
  3. $firewall -> firewall();
  4.  
  5. ?>

lub np, zastosowanie filtra
  1. <?php
  2. $firewall -> register('_GET', 'parametr|strtolower', 'chars_only');
  3. ?>


i teraz jesli jest "parametr" przez php.php?parametr=8jk838 , czyli cos innego niz zdefiniowana regula, to firewall robi "cos tam"
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Bastion 10.03.2006, 09:27:41
Go to the top of the page
+Quote Post
mike
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A nie możesz tak:
  1. <?php
  2.  
  3. function register( &$arrSuperglobal, $strVar, $strFilter )
  4. {
  5. print_r( $arrSuperglobal );
  6. }
  7.  
  8. register( $_GET, 'id', 'digit' );
  9. register( $_POST, 'value', 'chars' );
  10.  
  11. ?>
:?:
Go to the top of the page
+Quote Post
Bastion
post
Post #10





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


no wlasnie o to chodzi ze nie za bardzo , bo register() tworzy tablice regul, dopiero uzycie firewall() sprawdza po kolei reguly , jesli cos sie nie zgadza poprawia, reportuje, wysyla maila adminowi czy co tam sie ustawic

chcialem uniknac sprawdzania w stylu

  1. <?php
  2. switch ($method)
  3. {
  4.  case '_GET' :
  5. if (!is_integer($_GET['zmienna'] && $rule=='integer') { ...... }
  6. break;
  7. }
  8. ?>


i zorbic cos takiegio
  1. <?php
  2. $meth = ${$method};
  3. switch ($rule)
  4. {
  5.  case 'integer':
  6. if (!is_integer($meth['zmienna']) { ...... }
  7. break;
  8. }
  9.  
  10. ?>


hm hm hm (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) chyba musze dokladniej to przeglokowac

Ten post edytował Bastion 10.03.2006, 10:09:55
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 13.06.2026 - 20:20