Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> __get $_GET, $_POST, pobieranie danych od usera
dr_bonzo
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Zamiast spac wpadlem na ciekawy pomysl i napisalem cos takiego:
  1. <?php
  2. class UserData
  3. {
  4. private $arrValues = array();
  5.  
  6. public UserData( $strSource )
  7. {
  8. $this->strSource = strval( $strSource );
  9. }
  10.  
  11. public __get( $strValName )
  12. {
  13. if ( isset( $this->arrValues[ $strValName ] ) )
  14. {
  15. if ( is_null( $this->arrValues[ $strValName ] ) )
  16. {
  17. throw new Exception( 'Value not present' );
  18. }
  19. else
  20. {
  21. return $this->arrValues[ $strValName ];
  22. }
  23. }
  24. else
  25. {
  26. $arrSuperGlobalArray = NULL;
  27.  
  28. switch ( $this->arrValues )
  29. {
  30. case 'get':
  31. {
  32. $arrSuperGlobalArray &= $_GET;
  33. break;
  34. }
  35.  
  36. case 'post':
  37. {
  38. $arrSuperGlobalArray &= $_POST;
  39. break;
  40. }
  41.  
  42. case 'cookie':
  43. {
  44. $arrSuperGlobalArray &= $_COOKIE;
  45. break;
  46. }
  47.  
  48. default :
  49. {
  50. throw new Exception( 'Invalid source type '' . $this->strSource . ''' );
  51. }
  52. }
  53.  
  54. if ( isset( $arrSuperGlobalArray[ $strValName ] ) )
  55. {
  56. return $arrSuperGlobalArray[ $strValName ];
  57. }
  58. else
  59. {
  60. $this->arrValues[ $strValName ] = NULL;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. $objGetValues = new UserData( 'get' );
  67. print( $objGetValues->action );
  68.  
  69. $objPostValues = new UserData( 'post' );
  70. print( $objPostValues->id );
  71.  
  72. ?>


Nowy sposob pobierania danych wykorzystujacy php5. Nie testowany -- nie mam serwera pod reka. Co o tym sadzicie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Refactoring:

Jeżeli już, to w parametrze nie przekazujemy 'cookie', tylko $_COOKIE. Oszczędność kodu, czasu i po prostu czytelniejsze. \

Idźmy dalej. Potrzebna jest funkcjonalność pozwalająca na wyciągnięcie wszystkich parametrów np. POST. Możemy więc dodać metodę np. getAllParameters(). Ale znacznie lepiej użyć wbudowanych iteratorów - funkcjonalność będzie znacznie większa, a wysiłek mały.

Kontynuujmy. Ponieważ to jest wrapper na tablicę, zamiast __get lepiej przeciążyć operator []. Czyli implementujemy kolejny interfejs php (chyba ArrayAccess?) i możemy używać naszej klasy tak jak tablicy. Będzie to bardziej naturalne w użyciu, więc chyba lepsze.

Skutek? Napisaliśmy kawałek kodu, który zachowuje się tak samo jak oryginalna tablica, wygląda jak tablica, nie robi praktycznie nic innego, za to zajmuje miejsce. Coś jest nie tak...

Tak naprawdę, jest jedna różnica: skrypt może zmienić zawartość $_POST, a nie może zmienić zawartości naszej pseudo-tablicy. Co może być zaletą. Dla mnie jest. Ale pomijając to, taki skrypt może być początkiem jakiejś klasy HttpRequest, ale jako cel sam w sobie jest mało praktyczny.
Go to the top of the page
+Quote Post

Posty w temacie


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: 23.12.2025 - 06:39