Was ist der Sinn von Class?

  • Guten Morgen Zusammen :)

    Wie ich es schon im Titel drin stehen habe:

    " Was ist der Sinn? "

    Habe mal so eine Kleine Sache vorbereitet:

    Ich sehe einfach einen Vorteil in Class... Es ist so gar länger.
    Oder sehe ich das jetzt falsch?
    Ich hoffe Jeden kann mir sagen, was der Sinn ist von Class
    Danke schon mal im Vorraus :)

    mfg Cookie

  • Du bist dadurch in der Lage, Objektorientiert zu arbeiten.
    Normalerweise teilt man den PHP Kentnissstand eines Menschen in drei Stufen:

    #1 Der gesamte Code besteht fast ausschließlich aus if-abfragen, es ist kein logischer aufbau, der text ist schwer lesbar

    #2 Ansätze einer Dateistrukturierung und besseren Lesbarkeit des Codes sind zu erkennen. Eigene Functions werden genutzt.

    #3 Der User arbeitet Objektorientiert.


    Du musst dir kompliziertere Sachen vorstellen. Zumbeispiel die Berechnung eines Einkaufswagens und die Artikel, die reingehören. Damit ist man in der Lage, deutlich strukturierter zu arbeiten.

    Zum anderen kannst du dir Objektorientierte Scripte schreiben, zum Beispiel einen Errorhandler, den du in unterschiedlichen Projekten immer wieder nutzen kannst.

    Falls es dich interessiert. suche dir man das Beispiel für eine Objektorientierte Fuhrparkverwaltung raus. Da siehst du am besten wozu du das brauchst.

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  • Hi Bambino,
    danke erstmal für eine Antwort.

    Ich habe mir gleich mal ein Beispiel rausgesucht.
    Habe einige gefunden, mit Autos oder änlichem.
    Es hat mir echt den Sinn gezeigt :)
    Es ist viel einfacher mit Class zuarbeiten.

    Und wegen dem 'PHP Kentnissstand',
    dass ist auch ganz gut zu wissen, danke auch dafür.
    Ich würde mich zurzeit in die zweite Stufe packen *grins*
    Aber ich werde mir jetzt mal Class vornehmen.

    mfg Cookie :)


  • #1 Der gesamte Code besteht fast ausschließlich aus if-abfragen, es ist kein logischer aufbau, der text ist schwer lesbar

    #2 Ansätze einer Dateistrukturierung und besseren Lesbarkeit des Codes sind zu erkennen. Eigene Functions werden genutzt.

    #3 Der User arbeitet Objektorientiert.

    Also was 3 für ne Steigerung zu 2 sein soll, müsstest du mir erstmal erklären... Objekte sind schön und gut, aber auf keinen Fall immer nötig oder gar Sinnvoll. Ich finde, es ist eine sehr miese verallgemeinerung die du da schreibst!

    Wenn man ein kompliziertes Objekt braucht - macht mans halt. Aber um irgendwas aus der Datenbank auszulesen und in eine Variable zu schreiben braucht man wohl kaum eine eigene Klasse.
    Bei vielen Sachen ist es letztendlich sogar Jacke die Hose.


    Beispiel: Man will in einer Variable ein <input> Feld haben, dieses soll 1 Farbe haben. Fals ein Formular abgeschickt wurde soll geprüft werden, ob das Feld leer war.
    Wenns leer ist, eine Farbe (z.B. Rot) und fals es nicht leer wieder eine andere (z.B. Grün).

    So, wenn man nur diese eine Eigenschaft braucht, reicht eine Funktion vollkommen aus.
    Wenn man wiederrum mehr als dieses Inputfeld und noch zusätzliche Variablen setzen muss für die Funktionalität - ja dann macht ein Objekt erst Sinn - da man bei einem Objekt die Variablen mit einer Methode 1 mal setzen kann um sie später in anderen zu verwenden (z.B. wenn man ein Objekt "Form" macht, in dem all diese Aufgaben verteilt sind) -> wenn man mehrere Variablen für mehrere aufgeteilte Aufgaben braucht, ist es hilfreich, diese nur 1 mal setzen zu müssen und nicht jedesmal übergeben zu müssen.

    Um nochmal auf "Jacke die Hose" zurückzukommen: wenn man allerdings 100% sicher sagen kann, dass es für diesen Fall nur 1. dieses Objekt gebraucht wird, kann man das ganze auch mit Globalen Variablen lösen.


    Jetzt mal zu einem Beispiel für die Funktionen:
    Man will sich selbst eine Mail schicken, dafür gibts mehrere Sachen die man vorher irgendwo einstellen muss (Adresse, Server usw.) -> macht man dafür nun ein eigenes Objekt? Ich sage nein, dafür mach ich mir glatt eine Funktion, in die muss ich dann nur noch den Inhalt übergeben und damit hat sichs. Die Definitionen sind alle in der Funktion selbst, für ein Objekt wäre so ein rangehen irgendwie witzlos.

  • Du drehst mir ja die Worte im Mund um.

    Außerdem ist das nicht von mir ausgedacht.

    Und es wurde auch nicht geschrieben, dass du immer OO arbeiten musst, sondern es ist gemeint, du arbeitest OO, wenn dies günstiger ist, als ein anderer Weg.
    Objektorientierte Scripte kannst du auslagern und immer wieder nutzen, der Stil ist sauber, und wenn du es vernünftig machst, auch deutlich lesbar.

    Fühl dich nicht gleich auf den Schlips getreten, ich hab dem Threadersteller erklärt, wie ich es gelesen habe, und wie ich auch den Eindruck habe, estimmt.

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  • Also für mich ist es eine Auflistung von Zuständen so wie du es geschrieben hast :P

    Und nein, ich fühl mich nicht als wärst du mir auf den Schlips getreten. Nur so wies da steht, hört sich das an als wär OO the one and only... Des ist für mich nunmal blödsinn, aber ich denke das weist du auch. Hab dir auch geschrieben, dass es eine miese Veralgemeinerung ist - nicht mehr, nicht weniger ;)

  • Jetzt mal zu einem Beispiel für die Funktionen:
    Man will sich selbst eine Mail schicken, dafür gibts mehrere Sachen die man vorher irgendwo einstellen muss (Adresse, Server usw.) -> macht man dafür nun ein eigenes Objekt? Ich sage nein, dafür mach ich mir glatt eine Funktion, in die muss ich dann nur noch den Inhalt übergeben und damit hat sichs. Die Definitionen sind alle in der Funktion selbst, für ein Objekt wäre so ein rangehen irgendwie witzlos.

    Ich finde jetzt gerade in so einem Beispiel wäre es sinnvoll eine Klasse zu schreiben. Der Arbeitsaufwand ist nicht nennenswert grösser, man könnte aber für z.B. Massenmails oder schlicht Mails an eine andere Adresse sehr einfach eine abgeleitete Klasse erstellen, während man bei einer Funktion jedes mal wieder die Funktion umschreiben muss.

    -Lukas

  • Das ist jetzt aber wirklich Geschmackssache...

    Ich hab meine Library die ich mir in jedes Projekt reinknall (da sie noch nicht soo umfangreich ist).
    Dann kommt die Aufteilung des ganzen:

    config.php
    Konstanten werden definiert die nötig sind wie Datenbank adresse und z.B. auch meine eMail, Ausgangsserver ...

    lib_xy.php mit unterschiedlichen Funktionen die letztendlich verhindern, dass ich das Rad jedesmal neu Entwickeln muss. Wie z.B. eine Funktion Namens "mail_me($string)" in der ich auch den PHPMailer benutze.


    Jetzt zu der Geschmackssache: das ganze lässt sich genau so OO machen, dann hat man am ende in der config eben mehrere Zeilen Setter statt Konstanten. Nimmt sich so gesehen nichts, außer das man eben die Setter & Getter Methoden noch schreiben muss :rolleyes: .

  • Hai Leute,
    ich bin es nochmal ^^

    Arbeite zurzeit mit Class
    und versuche nun meine functions.php möglichst in class umzuwandeln.
    Jetzt bin ich an so einen Punkt angekommen wo ich einfach nicht mehr weiter weiß^^

    also wegen meiner "functions.php"...
    Sie ist so aufgebaut, dass ich nur schreiben muss:

    Das ging auch ganz gut.
    Nur dann ist mir was aufgefallen,
    Class hat einen schönen vorteil und zwar könnte man den teil mit:

    'user', $_SESSION['user_id']

    in der Check function rauslassen, in dem man einfach

    PHP
    $user = new user($_SESSION['user_id']);
    $user->check('design', 'bg');

    Kann man das irgendwie realisieren bzw. mit Class diesen riesigen Switch-Code etwas kleiner halten oder rauslassen?

    Danke schon einmal für Eure hilfe.

    mfg wiedre mal Cookie :)

  • Ohhh man ^^

    so kann das nicht geben *lach*

    Soooo:


    SORRY...

  • ACHTUNG

    Gewöhne dir mal nen ordentliche Stil an:
    $a und $b sind keine sinnvollenvariablennamen.

    Weißt du in einem halben Jahr noch, was $a und $b ist?

    Zweitens: Wieso definierst du Standardwertefür die benötigten Parameter?
    Es ist doch keiner der übergebenen Parameter optional... ?


    =)

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  • Hai Bambino.

    Zu Erstens:
    Bei so einer Function könnte ich das noch wissen,
    denn es ist ja eine logische Reihenfolge:

    Check -> was checken? -> von wem? -> "unterbegriff" -> "2. unterbegriff"


    und zu Zweitens:
    ich habe die Parameter definiert, weil wenn ich es nicht mache dann kommt eine PHP fehlermeldung "Missing argument"


    mfg Cookie

  • Zum ersten:
    Richtig, jetzt weißt dus noch. Und jetzt erscheints dir logisch. Schreibst du aber ein größeres Projekt, und du hast 40 solcher Funktionen dauert es länger, bis du erst wieder weißt, was für Bedeutungen $a und $b hatten, wenn du es denn nicht ganz vergisst. Für mich war es eben schweer nachzuvollziehen was $a und $b sollten. Hättest du geschrieben

    PHP
    function check($objekt, $id, $unterbegriff, $unterobjekt')
    {  
         /// Blabla
    }

    Hätte jeder verstanden, worum es geht, und du hättest es auch in 5 Jahren noch verstanden. Klar, bei dem Beispiel sicherlich auch so, aber tu dir selber nen Gefallen und lerns richtig, dann können auch andere deine Scripte lesen.

    2.
    Na sicher kommt diese Fehlermeldung, wenn du eine Funktion mit 4 benötigten Parametern aufrufst, aber nur 3 angibst.
    Wenn du aufrufst, müssen natürlich auch alle übergeben werden.
    Außerdem könnte man mit diesen Standardwerten deine Function auch komplett ohne Parameter aufrufen, oder ausversehn nur mit 3 Parametern, und würde sich wundern, warum da solche Ausgaben kommen.

    Von daher: Standardwerte nur da, wo du sie unbedingt brauchst.

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  • Ja ich weiß was du meinst.
    ist jetzt nicht böse oder so gemeint
    nur in meiner Function gibt es auch angaben die zb $b gar nicht erst brauchen.

    zum beispiel wenn ich nur die E-mail auslesen möchte
    dann brauche ich im den fall ja nur $what und $a und $b nicht

    sonst müsste ich ja immer:

    PHP
    check('email', $_SESSION['user_id'], '', '');

    schreiben. so kann ich mir das dann sparen.

  • Naja, und das ist ja vollkommen richtig.
    Dann darfst du für $b, oder viel sinnvoller für $unterobjekt oder sonst was, nen Standardwert setzten.
    Für die anderen nicht!

    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!