Hallo vapita,
schön, dass Du deinen Code säubern und strukturieren möchtest.
Aber der Meckerfritze ist wieder da 😉
Ich habe dein Array/String Konzept noch nicht verstanden. Mal gehst Du die Array-Einträge durch, mal nimmst Du nur den ersten Eintrag. Ich hoffe, dein um ein Vierteljahr älteres Ich (dein schärfster Kritiker überhaupt) wird Dich dafür nicht hassen.
Ich glaube, du hast jetzt ganz allgemein versucht, Arrays zu behandeln. Hast Du Dir vorab Gedanken gemacht, ob ein Array als Input für diese Klasse überhaupt irgendwie sinnvoll ist und welchen sinnvollen Umgang es damit geben sollte? Arrays in $_POST kommen ja nur vor, wenn Du das im Form so vorsiehst, oder Dir irgendwer das bösartig hineinpostet. Heißt: Wenn Du vorhast, in deinem Login- oder Register-Form Passwort-Arrays einzubauen, dann überlege Dir, wie Du damit umgehen müsstest. Wenn Du das nicht vorhast, weise sie als manipulierte Eingabe zurück.
Methode hash:
- (is_array(...)) muss man nicht extra klammern.
- array_pop kann fehlschlagen, wenn das Array leer ist
- ist es tatsächlich sinnvoll, wenn hash nur den ersten Array-Eintrag hasht, wenn es ein Array bekommt? Könnte es nicht auch sinnvoll sein, jeden Eintrag einzeln zu hashen und ein Array aus Hashes zurückzugeben? Aber das hängt vom Grundkonzept für Arrays ab, siehe oben.
Methode verify:
- An sich okay, aber sie kann nicht mit Arrays umgehen. Konzept?
Methode isString:
- Ist falsch. Gib ihr ARRAY(1,2,"Hallo") als Eingabe und sie sagt TRUE. Gib ihr ARRAY(1,"Hallo",3) als Eingabe und sie sagt FALSE. Weil sie immer das Ergebnis für den letzten Eintrag zurückgibt.
- Ist ungeschickt. Es freut mich ja, dass Du Dich in den null coalesce Operator
??
verliebt hast, aber man braucht ihn nur dort, wo NULL auch wirklich vorkommen kann. Deine Array-Prüfung soll vermutlich eine "ist alles ein String" Prüfung durchführen. Dafür setzt man $passwordIsString vor der Schleife auf TRUE und in der Schleife schaut man, ob ein Eintrag ein Nicht-String ist. Wenn ja, setzt man $passwordIsString auf FALSE und bricht mit break aus der Schleife aus. - Null Coalescing braucht man in dieser Methode nirgends. Auch im else-Zweig nicht. Die PHP Doku sagt, dass is_string immer einen booleschen Wert liefert, niemals NULL.
Methode isEqual:
- Der
==
oder===
Operator liefern immer ein bool. ?? ist unnötig. - Kleinigkeit: Hier wäre ein typsicherer Vergleich mit
===
besser. Es wird wohl auch mit==
funktionieren, weil Du vorher auf Strings testest.
Methode hasMinLength:
- Array-Konzept...
- ?? unnötig, > liefert immer einen bool
Methode isComplex:
- Array-Konzept...
- Ein Konstrukt der Art (bedingung) ? true : false ist redundant, es sei denn, die Bedingung liefert auch mal was anderes als einen booleschen Wert. Das ist bei preg_match tatsächlich der Fall, es liefert 1 für "gefunden" oder 0 für "nicht gefunden", und FALSE für "da ging was schief". Schief gehen kann aber nur der Fall, dass deine Regex falsch ist. Ich finde, du solltest FALSE separat prüfen (mit ===, um es von 0 unterscheiden zu können) und dann einen Error loggen.
Sorry für die lange Liste...
Rolf
sumpsi - posui - obstruxi