Cytat(gitbejbe @ 17.10.2013, 13:19:20 )

co do call to chcialem własnie uniknąć wywoływania walidatorów w style " ->required() ->max(12) -> is_int() itd. Osobiscie bardziiej przypada mi do gustu wywoływanie jedenej metody i w niej podawania walidatorów. Tablice statyczna powstała po to aby móc wszystko ustawwić na poczatku dokumentu w klasie abstrakcyjnej. Wcześniejsza wersja opierała się na case'ach i to faktycznie było nietrafione rozwiązanie - co nie oznacza, ze obecna metoda jest elegancka. Tak to jednak sobie wymyśliłem
Ja Ci nie karzę pozwalać użytkownikowi na wywołanie metody dziecka bez kontroli rodzica. Zwróć uwagę na to ze metody protected nie wywołasz z zewnątrz a rozwiązanie jest szybsze jeżeli automatycznie na podstawie nazwy walidatora wywołujesz metodę, nie musisz pamiętać i "zjadać paznokci", bo zapomniałeś że trzeba to jeszcze dopisać do tablicy. Przykład: walidator notEmpty, metoda protected _valid__notEmpty() {};
Cytat(gitbejbe @ 17.10.2013, 13:19:20 )

powód taki sam jaki podałem wczesniej. Chciałem aby cały mechanizm obsługi był tylko w jedenej klasie abstrakcyjnej, tak abym w klasie dziedziczącej mógł skupić sie tylko na metodach walidujących : )
Pisząc ten skrypt na nowo, kierowąłem się głównie tym co sam mi napisałeś w tym temacie:
...
dokladnie wlasnie zrobiłem to w ten deseń : )
- logika tylko w jednej klasie
- oddzielilem walidatory do osobnej klasy i moge łatwo je edytowac oraz rozwiac w razie potrzeby
- metody pomocnicze rowniez mozna latwo dopisać
- tutaj tez sie kierowałem Twoja wczesniejszą wypowiedzią. Oddzieliłem pobranie tablic z danymi wejsciowymi (POST/GET) od ustawienia walidatorów dla tej tablicy.
To spójrz teraz na to tak:
Jestem rodzicem i mogę mieć dzieci, nie wiem jednak co to będą za dzieci, a raczej co te dzieci będą miały, do momentu ich powstania. Do własnych operacji używam tego co posiadają dzieci, więc powinienem wymusić na dzieciach aby posiadały to czego ja potrzebuję.
Prościej: jeżeli deklarujesz tablicę z nazwami walidatorów w klasie rodzica, to nie możesz wymagać ich obecności u dzieci, może dojść do sytuacji gdzie masz grupę walidatorów w kilku klasach, dziedziczących po klasie Engine, machnąłeś się gdzieś i chcesz walidatora z innej klasy, której nie używasz, a definicja walidatora jest w Engine, więc będzie go szukać w określonej metodzie. Wywali błąd bo nie znajdzie walidatora, i prawidłowo.
Jeżeli chcesz wymusić aby "dzieci" posiadały określone metody to robi się to inaczej.
W obecnym rozwiązaniu nie masz pewności czy metoda istnieje w klasie dziedziczącej, najlepszym wyjściem byłoby deklarowanie tej tablicy w klasie dziedziczącej, albo stworzenie metody która zwracałaby wszystkie dostępne walidatory z tej klasy.
Mogłem gdzieś pomieszać, przepraszam.
@edit.
Jeszcze jedno:
Cytat(gitbejbe @ 17.10.2013, 13:19:20 )

Tutaj masz racje. filtry typu striptags/htmlspecialchar nie powinny tutaj istnieć. Jednak ten skrypt bedzie stosowany tylko dla moich potrzeb i nie robie tego "komercyjnie". Sens tych 2 metod jest znikomy - a nawet żadny, ale dodałem je - przyjnajmiej tymczasowo, dla zwykłego picu : ) Powinienem o tym był wspomnieć...
Jest taka zasada, jedna klasa, jedna funkcjonalność. Jeżeli masz wzorzec MVC, to widać to idealnie. Osobno jest kontrola odbieranych danych, osobno ich obróbka, osobno ich wyświetlenie. Tak samo powinieneś stosować się do tej zasady i jeżeli masz klasę do walidacji, to powinna ona tylko sprawdzać poprawność danych czyli zwracać true jak jest OK lub false jak nie jest OK, i ewentualnie błędy. Jeżeli masz klasę filtrowania danych to tak samo, albo zwracasz dane w odpowiednim formacie, albo zwracasz false/błąd/cokolwiek żeby wiedzieć że danych nie da się przetworzyć do odpowiedniego formatu.