php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-06-2009, 17:28
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Validierungen über eine Klasse

Hallo.
Ich eröffne kurz einen neuen Thread, weil er eher nicht zum vorherigen passt.
Ich habe mich über OOP informiert und wollte bei euch einmal "anfragen",
wie Ihr eine Validierung zusammenfasst.

Eine einzelne Validierung ist kein Problem.
Wenn jedoch mehrere Validierungen durchgeführt und die evtl. Fehlermeldungen zusammen ausgegeben werden.

Wie setze ich die Klassen dann am besten ein?
Eine Hauptklasse, z.B. allgemeine_validierung
welche ein neues Objekt als Parameter mitbekommt,
dieses Objekt zur Prüfung nutzt und die evtl. Fehlermeldung des Objektes bzw. der mehreren Objekte in der allgemeinen_validerung Klasse zusammenfügt und gemeinsam ausgibt.

Dann werden die direkten Prüfungsklassen extends allgemeine_validierung bezogen programmiert.

Jedoch, wie soll die allgemeine_validierung die Fehlermeldungen speichern?
Einfach in einer Array?
Oder jedes Objekt nochmals durchlaufen und ausgeben?

Danke
Mit Zitat antworten
  #2 (permalink)  
Alt 24-06-2009, 17:55
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hoffe, jemand versteht meine Beweggründe

Ein Beispiel woran ich gerade bastel (funktioniert nur noch nicht, warum auch immer )
PHP-Code:
<?php

class validierung
{
    var 
$error_msg;

    function 
validierung()
    {
        
$this->error_msg = array();
    }

    function 
validierung_string($object$error_msg)
    {
        if(
$object == false)
        {
            echo 
$error_msg;
        } else {
            echo 
"TRUE";
        }
    }
}

class 
lenght_min_max extends validierung
{
    var 
$mystring;
    var 
$min_lenght;
    var 
$max_lenght;

    function 
lenght_min_max($mystring$min_lenght$max_lenght)
    {
        
$this->mystring $mystring;
        
$this->min_lenght $min_lenght;
        
$this->max_lenght $max_lenght;

        return 
$this->check();
    }

    function 
check()
    {
        
$mystring trim($this->mystring);
        return 
strlen($mystring) >= $this->min_lenght && strlen($mystring) <= $this->max_lenght;
    }
}

$prüfung = new validierung;

$prüfung->validierung_string(new lenght_min_max("Eigentlich True"230), "Der Wert liegt nicht zwischen 2 und 30");
?>
Mit Zitat antworten
  #3 (permalink)  
Alt 24-06-2009, 18:04
ForumTestUser
 Guest
ForumTestUser
Beiträge: n/a
Standard

Üblicherweise speichert man (zumindest Ich mache das idr. so) die Fehler in einem Array.
Beim mehrsprachigen Fehlern sollte man allgemeine und eindeutige Bezeichner benutzen die dann in eine Fehlermeldung der entsprechenden Sprache umgesetzt werden.
Als simples Beispiel:
PHP-Code:
  // --> Einsprachig
  
$errors = array();
  if (
$var == "doof") {
    
$errors[] = "Die Variable ist doof!";
  }
  if (!empty(
$errors)) {
    
// Fehler sind aufgetreten
     
$errors_text "- ".implode("<br>- "$errors);
  }


  
// --> Multilingual
  
$errors = array();
  if (
$var == "doof") {
    
$errors[] = "ERR_VAR_DOOF";
  }
  if (!empty(
$errors)) {
    
// Fehler sind aufgetreten
    
$errors_text "- ".implode("<br>- "get_error_strings($errors$language));
  } 
Wie du das in deine Klasse bekommst weisst du hoffe ich selber
Ich hoffe das Hilft dir. Schönen Feierabend wünsche ich

mfg Jens
Mit Zitat antworten
  #4 (permalink)  
Alt 24-06-2009, 18:07
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dankeschön.

Nur wollte ich nicht wieder mit den Arrays anfangen und dort alles verzeichnen.
Oder ist das in diesem Fall gestattet?

Wenn die Klassen schon so dynamisch funktionieren und allgemein einsetzbar sind, dann kam mir eine Speicherung der Fehler in eine Array zur gemeinsamen Ausgabe etwas "..." vor !?


Dazu: (Ist die Klasse so ok? Oder ist die Return Methode nicht angebracht in dem Stil?)
PHP-Code:
<?php

class validierung
{
    var 
$error_msg;

    function 
validierung()
    {
        
$this->error_msg = array();
    }

    function 
validierung_string($object$error_msg)
    {
        if(
$object->error == false)
        {
            echo 
$error_msg;
        } else {
            echo 
"Alles ok";
        }
    }
}

class 
lenght_min_max
{
    var 
$mystring;
    var 
$min_lenght;
    var 
$max_lenght;
    var 
$error;

    function 
lenght_min_max($mystring$min_lenght$max_lenght)
    {
        
$this->mystring $mystring;
        
$this->min_lenght $min_lenght;
        
$this->max_lenght $max_lenght;
        
$this->error $this->check();

    }

    function 
check()
    {
        
$mystring trim($this->mystring);
        return 
strlen($mystring) >= $this->min_lenght && strlen($mystring) <= $this->max_lenght;
    }
}

$prüfung = new validierung;

$prüfung->validierung_string(new lenght_min_max("Müsste True sein"230), "Der Wert liegt nicht zwischen 2 und 30");
?>
Mit Zitat antworten
  #5 (permalink)  
Alt 24-06-2009, 18:11
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Schau dir doch mal die Validierungsklassen des Zend Frameworks an. Die haben ein Interface für eine Validierungsklasse, gegen dass die konkreten Klassen geschrieben werden. Die Fehlermeldungen pro Validierung werden zunächst in der entsprechenden Validierungsinstanz gespeichert. Eine übergeordnete Klasse stapft dann über die Validierungen und fragt nach Fehlern.

Ein Beispiel: Eine Validierung kann mehrere Fehlermeldungen produzieren. Ein Passwort zum Beispiel kann gegen eine Mindestlänge nicht erreichen und zu wenig Sonderzeichen beinhalten. Trotzdem wird man sich bequemerweise eine Passwort-Validierungsklasse bauen (die evtl. wieder weitere Validierungen zu rate zieht, aber davon muss die "Außenwelt" nicht wissen).

Einer Validierungsklasse allerdings eine Ableitung von sich selbst zu übergeben ist eher ungeschickt. Eigentlich bringt die Ableitung ja alles mit, was sie können muss –*oder sollte es jedenfalls.
Mit Zitat antworten
  #6 (permalink)  
Alt 25-06-2009, 01:24
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich finde es persönlich in meiner Anfangsphase den Wechsel
von der Redundanz zu Klassen äußerst schwierig,
da ich mir nie sicher bin, was ich nun in eine Klasse schreiben,
oder lieber doch redundant code.

Erfahrung?
Ich sehe viele Projekte in welchen SourceCodes einfach fast alles in
Klassen gewürfelt wird und in anderen nur in funktionen.
Mit Zitat antworten
  #7 (permalink)  
Alt 25-06-2009, 01:37
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Wenn du merkst, dass du ein paar Zeilen Code schonmal geschrieben hast, dann musst du "refaktorieren". Und das darf man nie aufschieben, dass muss man sofort machen. Konkret musst du an dieser Stelle dafür sorgen, dass der Code nur einmal vorkommt (und nicht das Anti Pattern des Duplicate Codes erfüllt).

Deswegen vererbt man Klassen auch nicht wild durch die Gegend sondern baut eine Hierarchie auf. Generelle Projekt/Framework-Klasse -> Abstrakte Validierungsklasse -> Konkrete Validierungsklasse -> Spezielle Validierungsklasse

Das funktioniert natürlich nicht mehr, wenn man auf ein externes Framework o.ä. aufsetzt, aber prinzipiell macht man es da genau so.

Was "funktional" oder "objektorientiert" angeht: Entscheide dich für eines. Ein Misch Masch führt alle Beteiligten früher oder später in den Wahnsinn.

Edit: Und jetzt guck dir die ZF-Validierungsklassen an!

Geändert von unset (25-06-2009 um 01:40 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 25-06-2009, 01:38
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Mich verwirrt dein Gebrauch des Wortes Redundanz. Klingt als wäre es für dich das Gegenteil von oder eine Alternative zur Objektorientierung. Ist es aber nicht.
Meinst du vielleicht prozedurale Programmierung (= alles in Funktionen, keine Klassen)?
Mit Zitat antworten
  #9 (permalink)  
Alt 25-06-2009, 02:33
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Mich verwirrt dein Gebrauch des Wortes Redundanz. Klingt als wäre es für dich das Gegenteil von oder eine Alternative zur Objektorientierung. Ist es aber nicht.
Meinst du vielleicht prozedurale Programmierung (= alles in Funktionen, keine Klassen)?
Ja. Tut mir leid. Natürlich meine ich prozedural
Ist schon spät und kam vorhin ausm Kino.
Mit Zitat antworten
  #10 (permalink)  
Alt 27-06-2009, 17:01
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ist es ok, eine SQL Abfrage durchführen zu lassen aufgrund von
variablen Daten, welcher der Klasse gegeben werden?

Sprich, der SQL Klasse können beliebige Werte gegeben werden,
die Klasse setzt diese übergebenen werte zu einer query zusammen und fragt sie ab.

So braucht man nicht immer eine query schreiben sondern der klasse
nur sagen welche spalten man braucht und die query wird wie gesagt selbst zusammen gesetzt, abgefragt und das ergebnis zurückgegeben.

Eher eine schlechte Idee?
Mit Zitat antworten
  #11 (permalink)  
Alt 27-06-2009, 17:11
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von phpMorpheus2 Beitrag anzeigen
Ist es ok, eine SQL Abfrage durchführen zu lassen aufgrund von
variablen Daten, welcher der Klasse gegeben werden?

Sprich, der SQL Klasse können beliebige Werte gegeben werden,
die Klasse setzt diese übergebenen werte zu einer query zusammen und fragt sie ab.

So braucht man nicht immer eine query schreiben sondern der klasse
nur sagen welche spalten man braucht und die query wird wie gesagt selbst zusammen gesetzt, abgefragt und das ergebnis zurückgegeben.

Eher eine schlechte Idee?
Kommt darauf an, wie komplex die Querries werden können. Es gibt aber einige Frameworks, bei denen das so gemacht wird. Imho allerdings nicht direkt in der Datenbankklasse, sondern über eine weitere Klasse, die als Abstraktionsschicht dient.

Und wenn du das auch noch Datenbankübergreifend machen willst, dann schau dir mal Doctrine oder Propel an.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #12 (permalink)  
Alt 27-06-2009, 17:24
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Mach dich mal über das Prinzip eines DAO schlau. Ich glaube fast, das ist das, was du suchst.
Mit Zitat antworten
  #13 (permalink)  
Alt 27-06-2009, 17:28
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke

Was würde eine Hilflose Seele wie ich bloß ohne Euch Profis machen
Mit Zitat antworten
  #14 (permalink)  
Alt 27-06-2009, 17:36
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von phpMorpheus2 Beitrag anzeigen
Danke

Was würde eine Hilflose Seele wie ich bloß ohne Euch Profis machen
Woanders deine Fragen stellen .

Btw: Es gibt beim DAO ein Art von Grundschema. Zuerst modellierst du den Datenzugriff über ein Interface. Darauf baut dann eine abstrake Klasse für allgemeine Zugriffe auf Daten auf. Und darauf bauen dann konkrete Klassen auf, die von der Art des Zugriffs abhängen, also Datenbank, Textdatei, XML-Datei, SOAP-Daten oder sonst was.

Peter

EDIT:
Außerdem solltest du langsam mal von der alten PHP4-Schreibweise abkommen.
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite

Geändert von Kropff (27-06-2009 um 17:41 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 27-06-2009, 18:15
phpMorpheus2
 Registrierter Benutzer
Links : Onlinestatus : phpMorpheus2 ist offline
Registriert seit: Apr 2007
Beiträge: 646
Blog-Einträge: 2
phpMorpheus2 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Kropff Beitrag anzeigen
Woanders deine Fragen stellen .

Btw: Es gibt beim DAO ein Art von Grundschema. Zuerst modellierst du den Datenzugriff über ein Interface. Darauf baut dann eine abstrake Klasse für allgemeine Zugriffe auf Daten auf. Und darauf bauen dann konkrete Klassen auf, die von der Art des Zugriffs abhängen, also Datenbank, Textdatei, XML-Datei, SOAP-Daten oder sonst was.

Peter

EDIT:
Außerdem solltest du langsam mal von der alten PHP4-Schreibweise abkommen.
Klingt wie mein Projekt
Wieso PHP4?
Was schriebe ich denn in PHP4
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eine PHP Datei über eine andere bearbeiten 0NyX PHP Developer Forum 9 24-08-2007 10:21
Eine Klasse über mehrere Dateien verteilen st@tic PHP Developer Forum 1 22-08-2007 12:55
eine funktion "in" eine klasse erweitern.. nisita PHP Developer Forum 4 08-01-2006 18:01
Index über das Ergebnis einer Funktion über eine Spalte? ghostgambler SQL / Datenbanken 11 25-07-2005 16:33
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 17:20

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:54 Uhr.