kostenloser Webspace werbefrei: lima-city


Rückmeldung für Code

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo zusammen,

    ich bin aktuell dabei mich bezüglich PHP endlich mal weiterzuentwickeln. Nun bin ich an einem Punkt angekommen, wo ich gerne einmal Feedback von anderen hören möchte.

    Ich habe folgende zwei Code-Blöcke, um meinen Counter zu steuern.
    https://pastebin.com/jZ7Jwe3P
    https://pastebin.com/sKHb6DXA

    da ich vorher noch nie mit Klassen in PHP gearbeitet habe, wollte ich mich mal daran versuchen. Dabei raus gekommen ist folgendes:
    https://pastebin.com/7fyp76b8

    Nun wollte ich mal fragen, ob ihr irgendwelche Verbesserungsvorschläge habt. Ich persönliche denke ja, dass die neue Variante wesentlich eleganter gelöst ist als die alte.

    LG Marvin

    Beitrag zuletzt geändert: 10.8.2017 19:46:35 von marvinkleinmusic
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Eine Klasse zu schreiben nur um Besucher zu erfassen, oder andere simple Aufgaben auszuführen, ist kompletter overkill und eine Angewohnheit die Du dir am besten gleich abgewöhnen solltest. Andere Dinge die Du dir gleich mit abgewöhnen kannst sind:

    MySQLi im Klassen Scope: Erstelle eine Verbindung entweder im globalen Scope oder stelle einen statischen DatabaseHandler bereit. Dies ermöglicht andere Klassen und Code auf die Verbindung zuzugreifen und gibt dir die Möglichkeit die Verbindung sauber zu trennen. Etwas was du in deinem Code im Moment garnicht berücksichtigts.

    Nicht Klassen bezogenen Konstanten: DayInterval und MinuteInterval sollten entweder im global Scope definiert werden, oder in eine UtilityClass ausgelagert werden.

    Verarbeitung von ungefilterten Userdaten: Mehr oder weniger Regel nummero Uno... Vertraue keiner einzigen Benutzereingabe, oder Eingaben die vom Benutzer manipuliert werden können! $_POST, $_GET und $_SERVER sind Kandidaten die die Tür für Hacker, von der nicht sehr netten Sorte, weit auf machen, wenn die Daten ungefiltert verarbeitet werden.


    Was den Rest angeht, kann ich nur sagen dass Du dich noch einmal ein wenig mehr mit den Konzepten hinter OOP auseinandersetzen solltest. Und vor allem, versuch nicht gleich eine WollMilchSau zu erstellen die alles auf einmal kann. Fang mit simplen Sachen an wie zum Beispiel Klassen als Datenstrukturen (ohne eigentliche Funktionen) und versuche die Daten der Klasse mit verschiedenen Methoden zu manipulieren, klonen, serialisieren und zu speichern.

    Danach kannst du anfangen funktionalität in deine Klassen einzuarbeiten und dich dann mit Interfaces und anderen Klassen bezogenen Themen auseinander zu setzen.
  4. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo strange,

    vielen Dank für deine ausführliche Rückmeldung. Ich packe meine Antwort jeweils kursiv in dein Zitat.

    strange schrieb:
    Eine Klasse zu schreiben nur um Besucher zu erfassen, oder andere simple Aufgaben auszuführen, ist kompletter overkill und eine Angewohnheit die Du dir am besten gleich abgewöhnen solltest. Andere Dinge die Du dir gleich mit abgewöhnen kannst sind:
    Wofür wäre eine Klasse denn sinnvoll? Hast du hier vielleicht ein paar praktische Beispiele, die du mir nennen könntest.
    Die Funktionen kann ich ja auch ohne Klasse in eine PHP-Datei packen und dann aufrufen.


    MySQLi im Klassen Scope: Erstelle eine Verbindung entweder im globalen Scope oder stelle einen statischen DatabaseHandler bereit. Dies ermöglicht andere Klassen und Code auf die Verbindung zuzugreifen und gibt dir die Möglichkeit die Verbindung sauber zu trennen. Etwas was du in deinem Code im Moment garnicht berücksichtigts.
    das globale hatte ich ja zuvor, dies wollte ich ja loswerden. Wir würde das ganze denn mit einen statischen DatabaseHandler aussehen? Hast du hier vielleicht Links zu Erläuterungen oder Dokumentationen? Das Trennen der Verbindung habe ich tatsächlich vergessen. Dies werde ich schnell einbinden. Jedoch habe ich nie wirklich verstanden, wieso man die Verbindung schließen sollte. Weißt du wieso dies so ist?

    Nicht Klassen bezogenen Konstanten: DayInterval und MinuteInterval sollten entweder im global Scope definiert werden, oder in eine UtilityClass ausgelagert werden.
    Für mich waren diese Klassenbezogen, da diese von der Klasse verwendet wurden, um den Zeitpunkt eines Besuchers zu berechnen. Welchen unterschied macht es denn, wenn ich diese nicht in die Klasse, sondern in den globalen Scope packe?


    Verarbeitung von ungefilterten Userdaten: Mehr oder weniger Regel nummero Uno... Vertraue keiner einzigen Benutzereingabe, oder Eingaben die vom Benutzer manipuliert werden können! $_POST, $_GET und $_SERVER sind Kandidaten die die Tür für Hacker, von der nicht sehr netten Sorte, weit auf machen, wenn die Daten ungefiltert verarbeitet werden.
    Mein Fehler. Habe diese Werte nun mit mysqli_real_escape_string versehen. Eine Frage noch zu $_GET & $_POST. Sollte ich diese auch filtern, wenn diese nicht für eine sql Abfrage verwendet werden? Z.B., wenn ich nur eine gewisse Aktion durchführen möchte bei einen bestimmten GET Parameter.


    Was den Rest angeht, kann ich nur sagen dass Du dich noch einmal ein wenig mehr mit den Konzepten hinter OOP auseinandersetzen solltest. Und vor allem, versuch nicht gleich eine WollMilchSau zu erstellen die alles auf einmal kann. Fang mit simplen Sachen an wie zum Beispiel Klassen als Datenstrukturen (ohne eigentliche Funktionen) und versuche die Daten der Klasse mit verschiedenen Methoden zu manipulieren, klonen, serialisieren und zu speichern.
    Das war wie gesagt mein erstes mal, dass ich mich in PHP mit Klassen versucht habe. Zuvor habe ich dies immer mit verschiedenen Dateien (siehe Beispiel) geregelt.

    Danach kannst du anfangen funktionalität in deine Klassen einzuarbeiten und dich dann mit Interfaces und anderen Klassen bezogenen Themen auseinander zu setzen.


    LG Marvin
  5. Wofür wäre eine Klasse denn sinnvoll? Hast du hier vielleicht ein paar praktische Beispiele, die du mir nennen könntest.
    Die Funktionen kann ich ja auch ohne Klasse in eine PHP-Datei packen und dann aufrufen.

    Klassen sind im Prinzip nichts weiter als Arrays, die einen Haufen Daten nett und einfach verpacken. Typische "Objekte" die mit Klassen erstellt werden sind Benutzerdaten, Forenbeiträge, Kommentare, Produkte in einem Shopsystem und so weiter. Also Sammlungen von Daten bei denen es Sinn macht diese zu bündeln, damit diese einfacher verarbeitet werden können.

    Der Vorteil von Klassen ist das diese noch einen ganzen Haufen mehr Dinge drauf haben als nur Daten zu halten. Genauer will ich an dieser Stelle nicht wirklich drauf eingehen, da dies den Rahmen sprengen würde und dich sehr wahrscheinlich mit mehr Fragen da stehen lässt als am Anfang.

    Es gibt mehr als genug Tutorials die Dir die konzepte hinter OOP beibringen können und dir ebenfalls einen Einblick in so genannte Patterns geben können. Stichwort MVC, ein Pattern das sehr weit verbreitet im Webdevelopment ist und sich im Web bewährt hat.

    Für mich waren diese Klassenbezogen, da diese von der Klasse verwendet wurden, um den Zeitpunkt eines Besuchers zu berechnen. Welchen unterschied macht es denn, wenn ich diese nicht in die Klasse, sondern in den globalen Scope packe?

    Der Unterschied wird erst wirklich erkennbar wenn Du dieselben statischen Daten an mehreren Stellen verwenden willst. Du kannst zwar direkt auf diese Daten von einer anderen Klasse/Funktion/etc. zugreifen, aber stell Dir folgende Frage: "Wo würdest Du Zeitbezogene Daten erwarten?" Antwort: "Nicht in der Klasse die einen Besucherzähler verwaltet!"

    Um es anders zu formulieren, auf der logischen Ebene macht es keinen Sinn wiederverwendbare Konstanten in UniTasker zu "verstecken", wenn diese besser entweder im GloalScope oder einer Zeitbezogenen Klasse aufgehoben sind, damit diese einfacher wiederzufinden sind.

    Mein Fehler. Habe diese Werte nun mit mysqli_real_escape_string versehen. Eine Frage noch zu $_GET & $_POST. Sollte ich diese auch filtern, wenn diese nicht für eine sql Abfrage verwendet werden? Z.B., wenn ich nur eine gewisse Aktion durchführen möchte bei einen bestimmten GET Parameter.

    Jup. Man kann nie wissen was für Nebeneffekte eine geschickt gewählte Benutzereingabe haben kann. Und leider reicht auch mysqli_real_escape_string() in den meisten Fällen nicht aus. Aber zum glück bietet PHP ein paar eingebaute Funktionen an die die ganze Situation ein wenig vereinfachen: http://php.net/manual/en/book.filter.php

    Für den Rest verwendet man Reguläre Ausdrücke (Regex). Was wiederum leider ein ganz anderes Thema ist für dass Du am besten jemanden anderes als mich befragst, da Regex nicht wirklich eine meiner Stärken ist.

    Das war wie gesagt mein erstes mal, dass ich mich in PHP mit Klassen versucht habe. Zuvor habe ich dies immer mit verschiedenen Dateien (siehe Beispiel) geregelt.

    Hat man gesehen, deswegen hast Du auch gleich die Schelte bekommen eine Klasse für etwas zu verwenden was man "klassischen" Code hätte lösen können. Man verwendet einfach keine Klassen für Aufgaben die simpler und schneller auf die gute alte Art erledigen kann.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!