Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa do filtracji danych
Forum PHP.pl > Forum > PHP
Manwe89
Witam. Chciałbym skonstowac klase do filtracji danych wejsciowych. Mialaby miejwiecej taki wyglad:
  1. <?php
  2. class filtracja{
  3.  __construct($tablica){
  4.    foreach($tablica as $key=>$wartosc){
  5.      //tutaj filtracja i problem 1
  6.    }
  7.  }
  8. }
  9.  
  10. $POST = new filtracja($_POST);
  11. ?>


i teraz jak zbudowac wnetrze klasy aby mozna bylo sie odwolywac do wartosci z przefiltowanej tablicy $_POST (czyli $POST) w następujący sposób:
  1. <?php
  2. $POST->klucz
  3. ?>
mike
1. Pomysł klasy o takim działaniu jak proponujesz jest pozbawiony sensu z funkcjonalnego punktu widzenia.
2. Skorzystaj z metod magicznych.
SirZooro
Musisz zaimplementować w klasie funkcję __get
Manwe89
wiem ze to nie jest najlepszy pomysl, ale opiekun projektu zarzyczyl sobie takiej klasy, ktora w taki sposob bedzie zwracala przefiltowane zmienne i nic na to nie poradze ;/ najwieksza moja bolaczka jest sposob w jaki stowrzyc zmienne wew. klasy tak aby ich nazwy odpoiwadaly kluczom z tablic... metody __get() i __set() sa mi znane.

Czy kod, pod wzgledem logicznym jest poprawny??;>

  1. <?php
  2. class A{
  3.  public $zmienna;
  4.  
  5.  function __set($klucz, $wartosc){
  6.    //funckje filtrujaca zapisujace przefiltrowana warosc w zmiennej $save;
  7.    $this->$zmienna[$klucz]=$save;
  8.    }
  9.  
  10.  function __get($klucz){
  11.    if(isset($this->zmienna[$klucz]){
  12.      return $this->zmienna[$klucz];
  13.    }
  14.    else{
  15.      return NULL;
  16.    }
  17.  }
  18.  
  19.  function __construct($tablica){
  20.    foreach($tablica as $key => $value){
  21.      __set($key, $value);
  22.    }
  23.  }
  24.  
  25. }
  26. ?>
erix
Cytat
najwieksza moja bolaczka jest sposob w jaki stowrzyc zmienne wew. klasy tak aby ich nazwy odpoiwadaly kluczom z tablic... metody __get() i __set() sa mi znane.

Masz prawie dobrze:
  1. <?php
  2. foreach($tablica as $key => $value){
  3.     __set($key, $value);
  4.   }
  5. ?>

Ale nie podajesz, z jakiego obiektu jest ta metoda. winksmiley.jpg
Poza tym:
  1. <?php
  2. $this->$zmienna[$klucz]=$save;
  3. ?>

Nie zgadzają Ci się nazwy zmiennych.
Manwe89
  1. <?php
  2. $this -> __set($key, $value)
  3. ?>
raczej nie bedzie poprwane. Więc jak to zastąpić?

A co do niezgodnośi zmiennych: $wartosc przechodzi przez takie funkcje jak: addslashes i końcowa wartość zapisywana jest w zmiennej $save.


No i ponawiam pytanie.
  1. <?php
  2. class A{
  3. ...
  4. }
  5.  
  6. $tablica = new A($_POST);
  7. ?>


I w jaki sposób teraz wskazać na klucz 'id' który był uprzednio w tablicy $_POST, a teraz w zmiennej $tablica (zakładając, że prawidłowo skonstuowana jest klasa 'A'. Jeżeli tak nie jest, proszę o pomoc). Przez:
$tablica->id;
questionmark.gif

EDIT------------

Teraz klasa wyglada tak:

  1. <?php
  2. class filtracja{
  3.    public $zmienna;
  4.  
  5.    public function save($klucz, $wartosc){
  6.        if(!get_magic_quotes_gpc()){
  7.            $this->zmienna[$klucz]=addslashes($wartosc);
  8.        }
  9.        else{
  10.            $this->zmienna[$klucz]=$wartosc;
  11.        }
  12.    }
  13.  
  14.    public function __get($klucz){
  15.        if(isset($this->zmienna[$klucz])){
  16.            if(!get_magic_quotes_gpc()){
  17.                return stripcslashes($this->zmienna[$klucz]);
  18.            }else{
  19.                return $this->zmienna[$klucz];
  20.            }
  21.        }
  22.        else{
  23.            return NULL;
  24.        }
  25.    }
  26.  
  27.    public function __construct($tablica){
  28.        foreach($tablica as $key => $value){
  29.            $this -> save($key, $value);
  30.        }
  31.    }
  32. }
  33. ?>


i działa w sposób poprwany smile.gif
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.