Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Wykonywanie jakiejś metody podczas wywołania innej metody
Forum PHP.pl > Forum > PHP
Sokal
Cześć,

Piszę kolejną klasę do mego frameworka, a mianowicie klasę Validation. No i mam do niej pomocniczą klasę ValidationCheck, która to zawiera zestaw metod do sprawdzania stringów. Każda metoda w tej klasie (ValidationCheck) powinna mieć na początku taki oto zapis:
Kod
$param = trim($param);


No niby jak będę stosował ten kawałek kodu to klasa nie będzie strasznie duża, ale przydałoby się to zautomatyzować winksmiley.jpg Niektórzy pewnie mnie wyśmieją, ale ja jestem ciekaw czy jest takie coś możliwe, żeby wszystkie parametry, które są podane metodzie przekazywane są najpierw innej metodzie która je odpowiednio obrabia, a następnie wykonywana jest ta "właściwa" metoda.

Przychodzi coś komuś do głowy?
misiek172
nie do końca łapie ale domyślam się że możesz coś takiego zrobić ale jak zrobisz sobie WŁASNĄ funkcję trim(); to nie powinno być trudne smile.gif po prostu literujesz string i sprawdzasz czy dany znak to na przykład spacja, potem patrzysz czy nastepny to litera, nie tak to usuwasz ten jeden jesli nie to sprawdzasz zakres tych spacji i substr smile.gif i tak samo od końca, string literujmey tak:

for($i=0;$i<=strlen($ciag);$i++){
echo $ciag{$i}."<br>";
}
domis86
misiek: nie o to chodzi smile.gif

sokal:
Jest taka możliwość. Np mozesz użyć do tego magicznej metody do ołwerlołdingu a mianowicie __call
( http://pl2.php.net/manual/en/language.oop5.overloading.php )

i robisz tak, ze wszystkie metody przed ktorymi ma sie wywolac ta funkcja sterylizująca napisy będą miały nazwy powiedzmy:
sanitize_[nazwa_metody]

czyli jezeli masz metode "validate" to w klasie bedzie jako "sanitize_validate"

i __call bedzie wygladac jakoś tak:

  1. <?php
  2. function __call($a_name, $dirty_params)
  3. {
  4. $name = 'sanitize_'.$a_name;
  5. if (!method_exists($this,$name)) die('Nie ma takiej metody '.$a_name);
  6.  
  7. $clean_params = sanitize($dirty_params);
  8. $result = call_user_func_array(array($this, $name), $clean_params);
  9.  
  10. return $result;
  11. }
  12. ?>


gdzie funkcja "sanitize" to jest ta funkcja ktorą chcesz uruchamiac przed kazda metodą zaczynającą się na "sanitize_"

wtedy metode "validate" uruchamiasz normalnie jak wczesniej:

  1. <?php
  2. $klasa->validate(....);
  3. ?>


wtedy uruchomi sie __call ktory wlaczy "sanitize" na parametrach a pozniej uruchomi metode "sanitize_validate" już z czystymi parametrami smile.gif


Mam nadzieję, że zrozumiałeś ogólną ideę. guitar.gif
Sokal
O spoko ...

Znam magiczne metody winksmiley.jpg Pomysł przedni, chyba bym na to nie wpadł... Dzięki za pomoc.
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.