2016-05-23 4 views
-1

Entschuldigung für die lange Frage. Ich weiß, wie man Klassen benutzt, aber manchmal kämpfe ich mit , wenn sie benutzt. Meine Frage ist dreifach wirklich ..OOP - Ist es eine gute Methode, immer Klassenmethoden anstelle von Funktionen zu verwenden?

1) Ist es eine gute Übung, immer eine Klassenmethode zu verwenden, auch wenn die Klasse keine Eigenschaften erhält/setzt?

Zum Beispiel, wenn ich eine Funktion will einen HTML-Header nur ausspucken, soll ich das machen ...

namespace Project1\UI; 

class HTML 
{ 
    public function makeHeader() 
    { 
     echo "<html><head><title>Title</title></head><body>"; 
    } 
} 

2) Haben Sie bauen Sie Ihre eigenen Klassen für Dinge wie Datenbankzugriff, anstatt die PDO-Erweiterung direkt anzurufen? Der folgende Code Komplexität hinzufügt, und wirklich nur Werte vorbei an den PDO auf:

namespace Project1\DB; 
use \PDO; 

class Database { 

    private $pdo; 
    private $statement; 

    public function __construct() { 

     require $_SERVER['DOCUMENT_ROOT'] . 'Project1/Config/Login.php'; 

     $pdo = new PDO(
      sprintf (
       'mysql:host=%s;dbname=%s;port=%s;charset=%s', 
       $settings['host'], 
       $settings['name'], 
       $settings['port'], 
       $settings['charset'] 
      ), 
      $settings['username'], 
      $settings['password'] 
     ); 

     $this->pdo = $pdo; 
     return $pdo; 
    } 

    public function prepare($statement) {  
     $this->statement = $this->pdo->prepare($statement); 
    } 

    public function bind($placeholder,$value) { 
     $this->statement->bindValue($placeholder,$value); 
    } 

    public function execute() { 
     $this->statement->execute();  
     return $this->statement->fetchAll(PDO::FETCH_ASSOC); 

    } 
} 

3) Wenn ich eine globale Funktion verwenden möchten, ist es eine gute Übung für, wo diese speichern auf der Festplatte ? Vermutlich sollte ich sie in eine separate Datei/Namespace legen?

/Project1/Logic/Validation.php << Contains a class 
/Project1/Logic/Search.php  << Contains a class 
/Project1/Logic/Compare.php << OK to just contain a function? 

Thanks :)

+3

Dies ist nur eine Anfrage für Meinungen. Es gibt keine allgemein akzeptierten Regeln über objektorientierte Programmierung oder Techniken. – kainaw

+0

Anstatt zu überlegen, was besser ist, bedenken Sie den Code, den Sie gerade schreiben, und fragen Sie sich: "Was ist los?" Gibt es ein Problem, das gelöst werden kann? Es gibt kein einziges korrektes Design für alle möglichen Situationen. Der "beste" Code ist Code, der funktioniert, während er einfach zu verstehen und zu unterstützen ist. Wie auch immer Sie zu diesem Ziel kommen, bleibt Ihnen überlassen. Während Sie den Code pflegen, suchen Sie nach "Schmerzpunkten", die angesprochen werden können und adressieren sie. – David

+0

Apropos PDO-Wrapper, wir schreiben sie, aber um [unsere Erfahrung zu verbessern] (https://phpdelusions.net/pdo/pdo_wrapper), um es nicht zu verderben, wie es [mit Ihrem aktuellen Wrapper] passiert (https://phddelusions.net/pdo/common_mistakes) –

Antwort

0

Antwort zu 1. und 3. Fragen

Ja, Sie können Klassen, die nur Funktionen implementiert, ohne Werte in Attribute zu speichern. Wir nennen diese Helfer übrigens ...

Und nein, es ist keine gute Idee, eine Klasse für jede einzelne Funktion zu erstellen, die Sie in Ihrem Projekt haben könnten. Beachten Sie, dass je mehr Dateien Sie einbinden müssen, desto mehr Lese-/Interpretierzeit wird Ihr Server verbrauchen und desto länger dauert die Ausführung Ihres Skripts.

Antwort 2. Frage

, dass Ihr Anruf ist. Ich würde empfehlen, die native PDO-Klasse zu erweitern, anstatt eine Proxy Class zu verwenden.

PDO ist eine gute Klasse, Sie wollen sich nicht beschränken oder das Rad neu erfinden

Verwandte Themen