Angepinnt [Tutorial] Weiterer Einblick in die OoP

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Natürlich speichert man werte auch in der DB. Es geht aber darum das du nur einmal den Code für ein Raumschiff schreiben musst. Und von diesen so viele "Objekte" erstellen kannst wie du willst. Du kannst sagen ok wir fangen mit 4 Schiffen an. Und in der nächsten Version gibt es dann schon 16 ohne das du etwas an dem eigentlich Raumschiff Code verändert hast.

      Ich hoffe es wird deutlich worauf ich hinaus will.

      Gruß
      Ulle
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Sieht doch schon mal bedeutend besser aus als am Anfang ;)

      Vielleicht solltest du noch erwähnen das die public, private und protected deklaration nicht nur für Variablen innerhalb der Klasse genutzt werden können sondern auch für Methoden welche die Klasse besitzt.

      Edit:
      Ich nehme mein Lob zurück. Ich habe jetzt bis zur Stelle mit den getter und setter Methoden gelesen. Und hier stellt sich mir die Frage was da schief gelaufen ist.
      In deinem Erklärungstext gehts du in der Tat auf die getter und setter methoden ein. Aber nicht in deinen Beispielen. NUr weil die funktion getWhatEver oder setWhatEver heißt ist es doch keine getter oder setter Methode.
      Diese beiden Arten gehören zu den magischen Methoden in der PHP OOP ebenso wie der constructor, descrutor, die autoload methode etc... Leicht erkennbar an den 2 unterstrichen vor dem namen. Bitte überarbeite diesen Teil nochmal.

      Desweiteren würde mich brennend Interessieren wie das gemeint ist

      "Webanwendungen können beispielsweise schnell in Windowsanwendungen portiert werden -> Dies spart viel Zeit und Geld"


      steht bei deinen Vorteilen der OOP.
    • NUr weil die funktion getWhatEver oder setWhatEver heißt ist es doch keine getter oder setter Methode.
      Diese beiden Arten gehören zu den magischen Methoden in der PHP OOP ebenso wie der constructor, descrutor, die autoload methode etc... Leicht erkennbar an den 2 unterstrichen vor dem namen. Bitte überarbeite diesen Teil nochmal.

      Da muss ich dir aber widersprechen! :)
      Ein Getter ist jede Methode, die ein Attribut abfrägt; ein Setter ist jede Methode, die ein Attribut verändert. In der Java-Welt sind Namen wie »setKuh« und »getKuh« auch typisch für Setter bzw. Getter; und die meisten PHP Frameworks nutzen ebenfalls diesen "Stil". Das ganze ist demnach unabhängig von den magischen Methoden »__set« und »__get«, welche du ja angesprochen hast. Zudem würde ich persönlich auch generell von diesen magischen Methoden abraten... IDEs haben damit massive Probleme; noch schlimmer ist da wohl nur noch »__call«. Zudem sind diese Methoden IMO auch zu PHP spezifisch...
    • Asche auf mein Haupt. Natürlich hat Well Recht. Ich bin bei den beiden Methoden von mir aus gegangen. Ich nutze das MVC Pattern in Verbindung mit dem Registry Pattern. Und das Registry Pattern profitiert nunmal von __get und __set.
      Du hast zwar Recht was diverse Magische Methoden anbelangt. Aber einige will ich nicht missen, eben die beiden __get und __set und __autoload. Es wird einen dadurch doch schon einiges erleichtert wie ich finde.
      Natürlich könnte man jetzt noch Diskutieren das es eigentlich auch wieder 3 Arten der Magischen Sachen gibt. Konstante, Funktionen, Methoden. Aber ich denke wenn wir einfach weiter sagen das es Magische Methoden sind, dann weiß jeder was gemeint ist :D
    • Und das Registry Pattern profitiert nunmal von __get und __set.

      Hm... wieso das? Das APF bietet dafür die Methoden Registry::register() und Registry::retrieve(); die Daten an sich werden einfach in einem Array gespeichert. Wie setzt du das um, dass __set und __get unverzichtbar sind? Welche Vorteile bietet dir das?
      IDEs wie Netbean zeigen dann ja an jeder Stelle, an der du auf die Registry zugreifst, einen Fehler an, da es das Attribut ja nicht gibt... Ich finde das wirklich nicht so toll. :)
    • Also ich habe nie gesagt das das __get und __set unverzichtbar sind. Ich selber nutze in meiner Controller Klasse. Dadurch das alle anderen Controller auf diesen aufbauen, ist es für mich schon von Vorteil, da ich somit flexibel auf eventualitäten Reagieren kann. Natürlich könnte man das auch alles anderst umsetzten. Vielleicht habe ich mich auch noch nicht so Tief mit dieser Materie auseinander gesetzt wie andere. Bis jetzt fallen mir aber keine Nachteile dazu ein, welche gegen die MEthoden sprechen.

      Hier mal meine Controller Klasse:

      PHP-Quellcode

      1. <?php
      2. abstract class baseController{
      3. /**
      4. * Beinhaltet das Registry Objekt
      5. * @access protected
      6. * @var object
      7. */
      8. protected $registry;
      9. /**
      10. * Registry Objekt bereitstellen
      11. *
      12. * @author xxxxxx
      13. * @access public
      14. * @param obj $registry Registry Objekt
      15. */
      16. public function __construct($registry){
      17. $this->registry = $registry;
      18. }
      19. /**
      20. * Bereistellen des gewüschten Objektes aus der Registry
      21. *
      22. * @author xxxxxx
      23. * @access public
      24. * @param obj $key Name vom Objekt welches bereitgestellt werden soll
      25. * @return obj Gibt das gewünschte Objekt wieder
      26. */
      27. public function __get($key){
      28. return $this->registry->get($key);
      29. }
      30. /**
      31. * Registrieren eines Objektes in der Registry
      32. *
      33. * @author xxxxxx
      34. * @access public
      35. * @param string $key Name wie es in der Registry gespeichert werden soll
      36. * @param string $value Wert der in der Registry gespeichert werden soll
      37. */
      38. public function __set($key, $value){
      39. $this->registry->set($key, $value);
      40. }
      41. /**
      42. * Funktion welche jede Klasse haben muss wenn diese
      43. * den baseController extended
      44. *
      45. * @author xxxxxx
      46. */
      47. abstract function index();
      48. }
      49. ?>
      Alles anzeigen


      Wie gesagt natürlich kann man es auch anderst machen, aber mir erschließt sich eben net so der Sinn warum ich das machen sollte :D
    • Wieso übergibst du das Registry-Objekt an jeden Controller und nutzt nicht das Singleton-Pattern, oder, noch besser (bzw. schneller), statische Methoden? Ich sehe da irgendwie keinen Sinn. :)
      Nachteile von »__set« und »__get« nannte ich ja bereits: die IDEs kommen damit nicht zurecht. :)

      Vielleicht habe ich mich auch noch nicht so Tief mit dieser Materie auseinander gesetzt wie andere.

      Da gibt es so ein Framework... das ist nicht überladen und recht modern. Zwar hat es eine sehr kleine Community, doch dafür wird es von deutschen Entwickelt, weswegen auch der persönliche Support vom Hauptentwickler auf deutsch erfolgt, welcher sich zudem sau gut mit OOD auskennt. Im Forum kann man über den Aufbau eigener Module / Anwendungen diskutieren als auch über Änderungen im Framework selbst. Wie hieß das nochmal? Genau! Das Adventure PHP Framework, APF! Damit sammelt man echt viel Erfahrung... :) *Werbung mach*
    • Lieber Well ich kenn das APF. Genauso das CakePHP, ZF und diverse kleine andere welcher Name hier aber keine Rolle spielt. Um nochmal auf deine Begründung gegen die beiden genannten Methoden zukommen.
      Nur weil deine IDE irgendeinen Fehler damit anzeigt ist es scheiße? Dann such dir ne andere IDE die damit klar kommt würde ich sagen ;). Ich nutze das Aptana Webstudio und muss sagen das hier keinerlei Probleme mit auftreten. Desweiteren übergebe ich das Registry an jeden Controller, damit ich auf die weiteren KernElemente in meinem System zurückgreifen kann. Wie zum Beispiel meine DB Klasse, die View Klasse etc....
      All diese Instanzen findet man in der Registry. Die Registry selbst wird als Singleton erstellt, so das eine 2 Registry nicht instanziert werden kann. Falls du nun sagst es ist doch dann überladen oder was auch immer. Auch hier möchte ich dich beruhigen. Alle benötigten Klassen welche zum momentanen Aufruf der Seite von nöten sind, werden auch erst dann geladen. Ich denke ich mal ich habe mir mit meinem kleinen System schon viele Stunden arbeit erspart, welche ich in wichtigere Dinge investieren konnte.

      Wie gesagt ich kenne die gängigsten Frameworks. Aber alle sind mir einfach zu überladen und / oder zu komplex für meine Zwecke. Ich kenne auch den entscheidenen Vorteil des APF, der ja darin besteht mehr als nur 2 Request gleichzeitig zumachen. Dennoch bin ich noch nicht so fitt was die Neuheiten in PHP 5.3 anbelangt ich spreche da von Namespace etc... welche das APF ja auch einsetzt. Vielleicht bin ich auch einfach nur zu faul die Doku zulesen ;)