Frage

Ich hätte gerne eine Referenz zu den Vor- und Nachteilen der Verwendung von include Dateien vs. Objekte (Klassen) bei der Entwicklung von PHP-Anwendungen.

Ich weiß, dass es für mich von Vorteil wäre, wenn ich eine Anlaufstelle für diese Antwort hätte ... Ich habe einige eigene Meinungen, freue mich aber darauf, andere zu hören.

Ein einfaches Beispiel:

Bestimmte Seiten meiner Website sind nur für eingeloggte Benutzer zugänglich.Ich habe zwei Optionen für die Implementierung (es gibt noch andere, aber beschränken wir uns auf diese beiden).

  1. Erstellen Sie eine Datei „authenticate.php“ und fügen Sie sie auf jeder Seite ein.Es enthält die Logik für die Authentifizierung.

  2. Erstellen Sie ein Benutzerobjekt mit einer Authentifizierungsfunktion und verweisen Sie auf jeder Seite auf das Objekt zur Authentifizierung.

BearbeitenIch würde gerne sehen, wie die Vorteile des einen gegenüber dem anderen abgewogen werden.Meine aktuellen (und schwachen Gründe) folgen:

Inklusive - Manchmal ist eine Funktion einfacher/kürzer/schneller, um Objekte aufzurufen - Gruppierung von Funktionen und Eigenschaften führt zur längerfristigen Wartung.

Inklusive - Weniger Code zum Schreiben (kein Konstruktor, keine Klassensyntax) Ich bin faul, aber das stimmt.

Objekte - Erzwingen Sie Formalität und einen einheitlichen Ansatz für Funktionen und Kreation.

Inklusive - Einfacher für einen Anfänger, mit Objekten umzugehen - für Anfänger schwieriger, aber von Fachleuten verpönt.

Ich schaue mir diese Faktoren zu Beginn eines Projekts an, um zu entscheiden, ob ich Includes oder Objekte machen möchte.Das sind ein paar Vor- und Nachteile, die mir spontan einfallen.

War es hilfreich?

Lösung

Dies sind keine wirklich gegensätzlichen Entscheidungen.Sie müssen den Prüfcode trotzdem angeben.Ich habe Ihre Frage als prozedurale Programmierung vs. gelesen.OO-Programmierung.

Ein paar Codezeilen oder eine Funktion zu schreiben und sie in den Seitenkopf einzufügen, war in PHP3 oder PHP4 üblich.Es ist einfach, es funktioniert (so haben wir es gemacht). osCommerce, zum Beispiel eine E-Commerce-PHP-Anwendung).

Aber es ist nicht einfach zu warten und zu ändern, wie viele Entwickler bestätigen können.

In PHP5 würden Sie ein Benutzerobjekt schreiben, das seine eigenen Daten und Methoden zur Authentifizierung enthält.Ihr Code wird klarer und einfacher zu warten, da alles, was mit Benutzern und Authentifizierung zu tun hat, an einem einzigen Ort konzentriert ist.

Andere Tipps

Während die Frage ein paar sehr umstrittene Themen berührt (OOP, Benutzerauthentifizierung), überspringe ich diese und schließe mich Konrads Kommentar zu __autoload an.Jeder, der sich mit C/C++ auskennt, weiß, wie mühsam das Einbinden von Dateien sein kann.Mit Autoload, einer PHP5-Ergänzung, müssen Sie, wenn Sie sich für die Verwendung von OOP entscheiden (was ich fast ausschließlich mache), nur einige Standard-Dateinamenskonventionen verwenden und (ich würde empfehlen) eine einzelne Klasse pro Datei einschränken, und PHP erledigt den Rest für Sie.Bereinigt den Code und Sie müssen sich nicht mehr darum kümmern, nicht mehr benötigte Includes zu entfernen (eines der vielen Probleme mit Includes).

Ich habe nicht viel PHP-Erfahrung, obwohl ich es bei meinem aktuellen Job verwende.Generell finde ich, dass größere Systeme von der Lesbarkeit und Verständlichkeit profitieren, die OO bietet.Aber auch Dinge wie Konsistenz (vermischen Sie OO und Nicht-OO nicht) und Ihre persönlichen Vorlieben (wenn auch wirklich nur bei persönlichen Projekten) sind ebenfalls wichtig.

Ich habe gelernt, es niemals zu benutzen include in PHP, außer innerhalb der Kernbibliotheken, die ich verwende, und einer zentralen include dieser Bibliotheken (+ config) in der Anwendung.Alles Weitere wird von einem Global erledigt __autoload Handler, der so konfiguriert werden kann, dass er die verschiedenen benötigten Klassen erkennt.Dies kann einfach durch entsprechende Namenskonventionen für die Klassen erfolgen.

Das ist nicht nur flexibel, sondern auch recht effizient und hält die Architektur sauber.

Können Sie etwas genauer sein?Für das von Ihnen angegebene Beispiel müssen Sie include auf beide Arten verwenden.Im Fall 1 fügen Sie nur eine Datei ein, im Fall 2 müssen Sie die Klassendatei (z. B. user.class.php) einbinden, um die Instanziierung der User-Klasse zu ermöglichen.

Es hängt davon ab, wie der Rest der Anwendung aufgebaut ist. Ist es OO?Verwenden Sie OO.

Unabhängig davon, ob Sie dies im Unterricht oder in einem prozeduraleren Stil tun, müssen Sie lediglich Folgendes überprüfen:

  1. Es gibt eine Sitzung;
  2. Dass die Sitzung gültig ist;Und,
  3. Dass der Benutzer, der die Sitzung besitzt, über die entsprechenden Berechtigungen verfügt.

Sie können alle drei Schritte in einer Funktion kapseln (oder eine statische Methode in einer Session-Klasse könnte funktionieren).Versuche dies:

class Session
{
  const GUEST = 0;
  const SUBSCRIBER = 1;
  const ADMINISTRATOR = 2;

  public static function Type()
  {
    session_start();

    // Depending on how you use sessions on
    // your site, you might just check for the
    // existence of PHPSESSID. If you track
    // every visitor with sessions, however, you
    // might want to assign some separate unique
    // number (that you can track in a DB) to
    // authenticated sessions
    if(!$_SESSION['uniqid'])
    {
      return Session::GUEST;
    }
    else
    {
      // For the best security, don't store the
      // user's access permissions in the $_SESSION,
      // but rather check against the DB. This will
      // ensure that recently deleted or downgraded
      // administrators will not be able to make use
      // of a previous session.

      return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
    }
  } 
}


// In your files that need to check for authentication (you
// could also do this in a controller if you're going MVC

if(!(Session::Type() == Session::ADMINISTRATOR))
{
  // Redirect them to wherever you want them to go instead,
  // like a log in page or something like that.
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top