2016-07-14 15 views
0

Kürzlich habe ich angefangen zu versuchen, mehr OOP-basierte Programmierung zu tun, wie ich weiß, es ist viel besser als prozedurale Programmierung, aber ich habe eine wahrscheinlich einfache Frage. Wenn ich eine "Aufgaben" -Klasse implementieren möchte, in der jede Aufgabe einen Titel, eine Beschreibung, eine Angabe, wie weit sie abgeschlossen ist und wer sie eingereicht hat. Ich habe den folgenden Code, um die Klasse zu erstellen:PHP Klassenvariablen zwischen Instanzen

class Tasks 
{ 
    public $title; 
    public $description; 
    public $completionPercent; 
    public $contact; 

    public function __construct($title, $description, $completionPercent, $contact) 
    { 
     $this->title = $title; 
     $this->description = $description; 
     $this->completionPercent = $completionPercent; 
     $this->contact = $contact; 
    } 

    public function getTitle() 
    { 
     return $this->title; 
    } 

    public function getDescription() 
    { 
     return $this->description; 
    } 

    public function getCompletionPercent() 
    { 
     return $this->completionPercent; 
    } 

    public function getContact() 
    { 
     return $this->contact; 
    } 

    public function setTitle($title) 
    { 
     $this->title = $title; 
    } 

    public function setDescription($description) 
    { 
     $this->description = $description; 
    } 

    public function setCompletionPercent($completionPercent) 
    { 
     $this->completionPercent = $completionPercent; 
    } 

    public function setContact($contact) 
    { 
     $this->contact =$contact; 
    } 

} 

Meine Frage ist, wenn ich eine Aufgabe erstellen und dann später zugreifen, wie in den Browser schließen und dann, um es kommen wieder ein paar Tage später, als ich ein Update haben Wie kann ich es speichern und wieder darauf zugreifen? Ich verstehe Datenbanken und verwende sie sehr oft in meinen aktuellen Seiten, die ich benutze, um zu lernen, aber ich sehe nicht, wie das Speichern der Informationen aus der Klasse in der Datenbank logisch wäre, wenn ich annehme, dass man die Klasse einfach überspringen und die Datenbank nutzen könnte. Ich habe gelesen, dass Sie XML/JSON in einer Datei serialisieren oder speichern können und auf die Klasse zugreifen können, aber ich sehe auch nicht, warum Sie die Klasse benötigen würden, wenn Sie einfach eine Datei in ein Array lesen und so verwenden könnten. Ich weiß, dass OOP wichtig ist, aber ich versuche immer noch, dorthin zu kommen, wo ich anfangen kann, Klassen regelmäßig zu benutzen, damit ich mich mit ihnen vertraut machen und Fortschritte als Programmierer machen kann. Ich bin mir sicher, dass es im Internet viel über ihn gibt, aber ich finde immer wieder Sachen über das Speichern von Klassenvariablen in Sitzungsvariablen, was nicht genau das ist, was ich möchte. Lassen Sie mich wissen, wenn es etwas gibt, das ich klären kann, ich weiß, wenn ich zuerst die Klasse mache, würde ich etwas wie $task1 = new Task(...); tun, aber nachdem ich meinen Browser schließe und mich wieder anmelde, kann ich immer noch nicht auf $task1 richtig zugreifen? Ich kann nicht einfach $task1->getTitle(); tun, wie kann ich die Klasse neu initialisieren?

+1

Ihre Fragen sind nicht spezifisch, ich verstehe nicht ganz, was Sie brauchen, trotzdem würde ich Ihnen eine Lesart vorschlagen, vielleicht sollten Sie sich ORM anschauen http://stackoverflow.com/questions/1279613/what-is- an-orm-und-wo-kann-ich-lerne-mehr-über-es und dann http://www.doctrine-project.org/ oder irgendeine andere Implementierung, die du selbst googeln kannst – scx

+1

BTW, deine Getter und Setter sind nutzlos. 1) Ihre Immobilien sind "öffentlich", so dass Setter umgangen werden können. 2) Ihre Setter * tun * nichts und fügen somit nichts über den direkten Eigentumszugang hinzu. - Bewahren Sie einfach Ihre Eigenschaften 'public' auf und entfernen Sie die Getter/Setter. – deceze

Antwort

1

Sie haben Recht, Sie müssen solche Informationen irgendwo speichern, und der richtige Ort dafür ist db. Also, Frage ist: Warum müssen Sie die Klasse "Task" verwenden und erstellen, wenn Sie es direkt in db speichern können. Weil Sie eine Anwendung basierend auf "Klassen und Objekten" erstellen möchten, um prozedurale Programmierung nicht zu verwenden, wie Sie gesagt haben. Daher müssen Sie Objekte verwenden und Klassen für alles erstellen, um eine vollständige OO-Anwendung zu erhalten.

Also sollte Ihre Anwendung auf Klassen/Objekte basieren und das ist, was Sie und einige andere Entwickler arbeiten. Jetzt müssen Sie nur diese Daten von diesem Objekt in der Datenbank speichern. Das bedeutet, dass Sie eine zusätzliche Schicht dafür einführen müssen. Eine sehr schöne ist Doctrine ORM. Es mappt und übersetzt Ihr Objekt in db. Üblicherweise hat jede Klasse ihre eigene Tabelle in db und jedes Feld in der Klasse hat eine eigene Spalte in db (dies ist nur für Klassen, die in db gespeichert werden müssen)

Der Punkt ist, dass Sie Objekte leicht in verwenden können Ihre Anwendung wie alle anderen Objekte, ohne zu wissen, wie sie in db (oder woanders) gespeichert werden sollen.Nur was Sie tun müssen, ist:

$task->save(); 

und das ist es. Diese Aufgabe wird in db gespeichert.

+0

Ok, wenn ich eine Klasse in der Datenbank speichere und sage, dass ich 10 Aufgaben habe, wenn ich nach ein paar Tagen auf diese Seite zurückkomme, wie stelle ich alle Aufgaben wieder als Objekte über die Daten aus der Datenbank wieder her. Wenn ich Aufgaben wie task1 erstelle, würde ich einfach '$ tasks1 = new Tasks (...);' was ich bekomme, aber wie greife ich wieder auf all diese Objekte zu? Zurück in der Klasse, die ich brauchte, als wir das tun mussten, benutzten wir .get (index) (das war in Java) und wenn wir ein bestimmtes Element wollten, mussten wir eine Art von Suche verwenden, um herauszufinden, welche Klasse übereinstimmte. Funktioniert das ähnlich in PHP? – AndyPet74

+0

hängt von dem ORM ab, das Sie verwenden, aber das Abrufen von Aufgaben ist ziemlich einfach und unkompliziert. Es könnte sein wie: $ task = new Task(); $ allTasks = $ task-> fetchAll(); Und in diesem Fall ist $ allTasks ein Array aller Aufgaben, die tatsächlich Objekte sind. Aber die Syntax hängt von ORM ab. Lehre ist eine sehr beliebte ORM und vielleicht können Sie sehen, wie es in Symfony (Framework) http://symfony.com/doc/current/book/doctrine.html funktioniert –

2

Klassen und Objekte helfen Ihnen, Ihren Code und Ihre Logik in eigenständigen Einheiten zu organisieren. Das ist alles. Und das ist sehr wichtig. Es behandelt nicht das Problem der Speicherung oder irgendetwas anderes.

Ja, Sie würden weiterhin die Daten des Objekts in der Datenbank speichern und dann erneut aus der Datenbank lesen und erneut eine Objektinstanz erstellen.

input → new Task(..) → store object data in database 
read data from database → new Task(..) → display on website 

Warum ist das besser, als direkt mit Arrays aus der Datenbank zu arbeiten? Weil es Ihnen ermöglicht, Ihren Code besser zu organisieren. Selbst wenn die Lebensdauer des Objekts nur einen Bruchteil einer Sekunde beträgt, kann der gesamte Code, der das Objekt verwendet, viel eleganter geschrieben werden und vor allem Typ, da klar definiert ist, wie dieses Objekt aussieht. Ein Array ist ein untypisierter Grab Bag von Sachen, die schwer zu arbeiten ist, je komplexer Ihre Anwendung wird. Besonders Refactoring-Code, der nur Arrays verwendet, ist sehr, sehr hart.

Verwandte Themen