Validatie klasse
Deze klasse heb ik geschreven om af te komen van alle is_string's in mijn code en die hele if's/else over te slaan. door zowel de mogelijkheid hebben alle variable type te beheren en de waarden van deze variable te controleren.
Gesponsorde koppelingen
PHP script bestanden
20 reacties op 'Validatie klasse'
Gesponsorde koppelingen
Dat kan. maar dit is mijn voorkeur :)
psje. Het enige waar ik persoonlijk niet tevreden mee ben is de getErrors functie. Die had ik tot 10 minuten geleden nog niet geschreven kwam ik achter >< dus snel even iets toegevoegd. (dr hoort bijvoorbeeld geen HTML in de klasse zelf te staan, maar om het voorbeeld netjes te maken was dat even nodig. Normaal gesproken zou ik denk ik gewoon met de m_aErrors iets in de controller / template doen.
psje. Het enige waar ik persoonlijk niet tevreden mee ben is de getErrors functie. Die had ik tot 10 minuten geleden nog niet geschreven kwam ik achter >< dus snel even iets toegevoegd. (dr hoort bijvoorbeeld geen HTML in de klasse zelf te staan, maar om het voorbeeld netjes te maken was dat even nodig. Normaal gesproken zou ik denk ik gewoon met de m_aErrors iets in de controller / template doen.
Afgezien van die oerlelijke variabele notatie (oke, dat is persoonlijk) kan dit nog veel beter.
Verder check je meermaals of iets niet goed is, terwijl je juist zou moeten checken of iets wel goed is. Er zijn veel meer gevallen waarin iets fout is, dan waarin iets goed is.
Daarnaast, maak gebruik van filter_var() als je de geldigheid van een emailadres wilt controleren.
Beter is het om door middel van een interface af te dwingen dat elke validatieklasse een methode getErrors() en isValid($input) heeft. Dat is flexibel. Als je dit van plan bent, kijk dan zeker eens naar het Observer Pattern.
Al met al ben je wel aardig op weg, maar het kan nog een stuk beter.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
private function isNum($p_mData) {
/*
if (!is_numeric($p_mData)) {
return false;
}
return true;
Wat is er mis met: */
return is_numeric($p_mData);
}
?>
private function isNum($p_mData) {
/*
if (!is_numeric($p_mData)) {
return false;
}
return true;
Wat is er mis met: */
return is_numeric($p_mData);
}
?>
Verder check je meermaals of iets niet goed is, terwijl je juist zou moeten checken of iets wel goed is. Er zijn veel meer gevallen waarin iets fout is, dan waarin iets goed is.
Daarnaast, maak gebruik van filter_var() als je de geldigheid van een emailadres wilt controleren.
GaMer13:
Dat denk ik zeker niet, alles zit nu in één class. Wat als je bijvoorbeeld een creditcardnummer wilt controleren? Een datum? Een custom reguliere expressie? Dat wordt dat een hoop gedoe.Ik denk dat dit ook nog eens flexibel is.
Beter is het om door middel van een interface af te dwingen dat elke validatieklasse een methode getErrors() en isValid($input) heeft. Dat is flexibel. Als je dit van plan bent, kijk dan zeker eens naar het Observer Pattern.
Al met al ben je wel aardig op weg, maar het kan nog een stuk beter.
@Aqirre.
Je hebt gelijk.
Je hebt gelijk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
return is_numeric($p_mData);
[/code]
doet precies hetzelfde.
Maar hoe bedoel je "Je controleert meermaals of iets niet goed". Waar bedoel je dat precies?
en filter_var(). Nog nooit van gehoord. zal het even doorlezen.
Als laatste dan de flexibiliteit:
Ten eerste horen dit 2 classes te zijn.
Cleaner en Validator.
Daarnaast. of iets flexibel is of niet is ook te discusseren. Ik gebruik hier inderdaad geen interface omdat ik nog niet het nut hiervan heb gezien in mijn applicaties. Mocht in de toekomst dat wel hebben zal dat evt een optie zijn.
Thanks voor je comment.
return is_numeric($p_mData);
[/code]
doet precies hetzelfde.
Maar hoe bedoel je "Je controleert meermaals of iets niet goed". Waar bedoel je dat precies?
en filter_var(). Nog nooit van gehoord. zal het even doorlezen.
Als laatste dan de flexibiliteit:
Ten eerste horen dit 2 classes te zijn.
Cleaner en Validator.
Daarnaast. of iets flexibel is of niet is ook te discusseren. Ik gebruik hier inderdaad geen interface omdat ik nog niet het nut hiervan heb gezien in mijn applicaties. Mocht in de toekomst dat wel hebben zal dat evt een optie zijn.
Thanks voor je comment.
Thijs:
Ik dacht al dat ik dat een beetje wazig zei. Ik zal een voorbeeld geven.Maar hoe bedoel je "Je controleert meermaals of iets niet goed". Waar bedoel je dat precies?
1. Stel, onze string mag enkel a's, b's en c's bevatten.
2. De input is 'abcxyz'.
3. We zouden nu op elk teken, behalve 'a', 'b' en 'c' kunnen checken. Als we er één vinden, retourneren we false.
4. Dit is natuurlijk niet de bedoeling. Er zijn veel meer letters die niet mogen, dan letters die wel zijn toegestaan.
5. We sneller uit zijn als we checken of iets goed is, dan checken of iets fout is.
Een voorbeeld in jouw script is de methode isInRange:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
if (!($p_mInt >= $p_mMin) OR !($p_mInt <= $p_mMax)) {
return false;
}
} else {
return false;
}
return true;
}
?>
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
if (!($p_mInt >= $p_mMin) OR !($p_mInt <= $p_mMax)) {
return false;
}
} else {
return false;
}
return true;
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
if ($p_mInt >= $p_mMin && $p_mInt <= $p_mMax) {
return true;
}
}
return false;
}
?>
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
if ($p_mInt >= $p_mMin && $p_mInt <= $p_mMax) {
return true;
}
}
return false;
}
?>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
return is_numeric($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax) && $p_mInt >= $p_mMin && $p_mInt <= $p_mMax;
}
?>
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
return is_numeric($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax) && $p_mInt >= $p_mMin && $p_mInt <= $p_mMax;
}
?>
O ja. nu heb ik je.
Dat is iets wat ik mezelf stiekem heb aangeleerd. Voornamenlijk om alles een beetje bij elkaar te houden.
Wat ik daarmee bedoel:
Dat is iets wat ik mezelf stiekem heb aangeleerd. Voornamenlijk om alles een beetje bij elkaar te houden.
Wat ik daarmee bedoel:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
private function test($p_sString) {
if (is_string($p_sString) {
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
} else {
//nu moet ik hier de foutafhandeling doen dat het geen string is
}
}
[/code]
In de functies in deze klasse moet ik je alweer gelijk geven. het is sneller om op positief te controleren ipv. negatief.
private function test($p_sString) {
if (is_string($p_sString) {
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
//code
} else {
//nu moet ik hier de foutafhandeling doen dat het geen string is
}
}
[/code]
In de functies in deze klasse moet ik je alweer gelijk geven. het is sneller om op positief te controleren ipv. negatief.
Quote:
ericbruggema schreef op 12.05.2009 09:50
Ik raad gewoon aan om zelf een goede regex te zoeken voor email validatie!
Ik raad gewoon aan om zelf een goede regex te zoeken voor email validatie!
Waarom zou je zelf een regex maken als filter_var gewoon netjes kijkt of het een valid email adres is? Nergens voor nodig lijkt mij.
Quote:
Vraagje uit interesse maar waarvoor staat de p_ ?
http://www.phphulp.nl/php/tutorials/8/341/703/
p_ = parameter variable
m_ = member variable
Voornamenlijk bedoelt zodat ik weet waar de parameter vandaan komt.
_i <- integer
_a <- array
_o <- object
_m <- mixed
_s <- string
_n <- numeric
_b <- boolean
Kheb in de klas gezeten bij Wouter Tengeler. Daar komt die voor mij ook vandaan en het is inderdaad de hongaarse Naamgeving.
Reden voor gebruiker van oa. m_ en p_ of helemaal niks is zodat ik makkelijk kan zien welke scope de variable in bevat. p_sString zou ik bijvoorbeeld nooit buiten de functiezelf kunnen gebruiken. m_sString daarentegen wel weer binnen de klassen, en buiten de klasse als die niet private is.
Variable zonder p_ of m_ notatie zijn variable die tijdelijke gegevens bevatten. Waar ik direct iets mee moet/ga doen.
m_ = member variable
Voornamenlijk bedoelt zodat ik weet waar de parameter vandaan komt.
_i <- integer
_a <- array
_o <- object
_m <- mixed
_s <- string
_n <- numeric
_b <- boolean
Kheb in de klas gezeten bij Wouter Tengeler. Daar komt die voor mij ook vandaan en het is inderdaad de hongaarse Naamgeving.
Reden voor gebruiker van oa. m_ en p_ of helemaal niks is zodat ik makkelijk kan zien welke scope de variable in bevat. p_sString zou ik bijvoorbeeld nooit buiten de functiezelf kunnen gebruiken. m_sString daarentegen wel weer binnen de klassen, en buiten de klasse als die niet private is.
Variable zonder p_ of m_ notatie zijn variable die tijdelijke gegevens bevatten. Waar ik direct iets mee moet/ga doen.
Deze lijkt op mijn oude filter klasse. Ik heb daarna een nieuwe versie gemaakt die wel OOP is.
Je hebt nu een validatie object die ook nog eens filtered. Je kan de functionaliteit alleen uitbreiden als je 'em extend.
TIP: Je zou een Interface kunnen maken die zegt hoe een type validatie object eruit zou moeten zien. Type validatie objecten zouden dan bv een email validator of een username validator kunnen zijn. Deze kan je dan per project veranderen zonder de hoofd validatie klasse aan te passen.
Je hebt nu een validatie object die ook nog eens filtered. Je kan de functionaliteit alleen uitbreiden als je 'em extend.
TIP: Je zou een Interface kunnen maken die zegt hoe een type validatie object eruit zou moeten zien. Type validatie objecten zouden dan bv een email validator of een username validator kunnen zijn. Deze kan je dan per project veranderen zonder de hoofd validatie klasse aan te passen.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Thijs Damen- 4 jaar geleden
- 641 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- Overig
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu