Bastian Kurz: PHP5 und OOP - Doku?

Hi!
Also ich habe mit PHP eigentlich nie objektorientiert programmiert. Jetzt wollte ich mit das mit PHP5 mal genauer ansehen, habe mir Texte dazu gesucht und ein paar Beispielscripte geschrieben.

Es ergeben sich nun für mich einige Fragen. Leider finde ich keine richtige Anleitung und auch keine Doku, die die Builtin-Objekte beschreibt. Ich hab mir mal alle Klassen ausgeben lassen, die bei PHP eingebaut sind.
Da finde ich jetzt auch eine Array-Klasse und Iterator-Klassen dafür. Sieht interessant aus. Aber wie nutze ich die? Ich finde keine Doku. Im deutschen PHP-Handbuch steht noch nichts dazu.
Welche Parameter erwarten die Kontruktoren? Welche Eigenschaften gibt es? Welche Methoden sind implementiert? Welche kann/muß ich überschreiben? Die Klassen müssen doch irgendwo genau beschrieben sein, oder?

Kennt jemand gute Links (deutsch bevorzugt, englisch auch ok),

Dann weiter:
Was ist in PHP der Unterschied zwischen :: und -> ?
Ich habe durch Versuch rausgefunden, daß self::irgendwas das eigene Objekt anspricht und das ich mit parent:: die Klasse von der ich abgeleitet habe anspreche. Gibt es da noch mehr festgelegte Bezeichnungen?

und:
Kann ich ein Objekt explizit zerstören und den Speicher freigeben?
Gibt es sowas in der Art?
$a = new my_obj();
delete( $a );

Danke für Eure Hilfe.

  1. Hello,

    Das Problem bei OOP ist eigentlich, dass man nebst der passend designed Language auch ein entsprechendes Entwicklungssytemen benötigt, dass einen Bei der Auswahl und der Konfiguration der Objekte unterstützt. Eine "IDE" gehört aber noch nicht zum Umfang von PHP. Solange man OOP zu Fuß gestalten muss, kann man auch (Makro-)Assembler programmieren.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Dem kann ich nun wirklich nicht zustimmen!
      Ich Programmiere schon seit langen in verschiedenen OO Sprachen, und dies auch ohne eine "praktische" IDE.
      Ebenso hab ich auch schon in Assembler Programmiert...
      Kurz, hab zwar noch nicht in PHP5 Programmiert aber:

      • beschäftige dich erstmal mit OOP unabhängig von der Sprache

      Es gibt unwahrscheinlich viele Links in Internet, manche einfacher zu lesen als andere.
      Genug geschwafel, hier schon mal ein Anfang:

      http://www.devmag.net/webprog/php_oop_1.htm

      Das war nur ein Link, keine Gewähr für die Verständlichkeit... Google mal ein bisschen...

      Claudio

        • beschäftige dich erstmal mit OOP unabhängig von der Sprache

        Danke, aber ich arbeite sonst auch schon mal mit Java. OOP ist nicht das Problem. Ich suche nur nach einer Doku für PHP5-OOP. Denn was nützt es mir, wenn ich weiß, daß es eine Array-Klasse gibt, aber ich nicht rausbekommen kann, welche Methoden ich überschreiben muß/darf oder welche Parameter der Konstruktor erwartet, usw..

        Es gibt unwahrscheinlich viele Links in Internet, manche einfacher zu lesen als andere.

        Ja, schon klar. Aber ich suche halt eine Referenz oder etwas, das die Neuerungen in PHP5 und die neuen Klassen mir näher bringt.
        Ich schaue sonst immer in das PHP-Handbuch, aber die hängen da scheinbar noch etwas zurück, so daß ich da nichts finden kann.

        Basti

        1. Hallo,

          http://www.phppatterns.com/

          Vielleicht findest du dort etwas; in bestimmten Problemfällen bin ich dort durchaus auf Lösungen gestoßen.

          Michael

        2. Danke, aber ich arbeite sonst auch schon mal mit Java. OOP ist nicht das Problem. Ich suche nur nach einer Doku für PHP5-OOP. Denn was nützt es mir, wenn ich weiß, daß es eine Array-Klasse gibt, aber ich nicht rausbekommen kann, welche Methoden ich überschreiben muß/darf oder welche Parameter der Konstruktor erwartet, usw..

          du suchst wahrscheinlich nach fertigen klassen, welche in php erstellt sind, und sich in einer biblithek oder paket befinden.
          solche liefert php nicht mit.
          es gibt aber eine sammlung von klassen in PEAR. dort solltest du mal nachschauen.

          Ja, schon klar. Aber ich suche halt eine Referenz oder etwas, das die Neuerungen in PHP5 und die neuen Klassen mir näher bringt.
          Ich schaue sonst immer in das PHP-Handbuch, aber die hängen da scheinbar noch etwas zurück, so daß ich da nichts finden kann.

          dies ist in der php doku unter klassen und objekte zu finden.

        3. Hello,

          • beschäftige dich erstmal mit OOP unabhängig von der Sprache
            Danke, aber ich arbeite sonst auch schon mal mit Java. OOP ist nicht das Problem. Ich suche nur nach einer Doku für PHP5-OOP. Denn was nützt es mir, wenn ich weiß, daß es eine Array-Klasse gibt, aber ich nicht rausbekommen kann, welche Methoden ich überschreiben muß/darf oder welche Parameter der Konstruktor erwartet, usw..

          Genau das habe ich gesagt!
          Wenn man keine IDE hat, die das füe einen "mal schnell" herausfindet, was nützt mir dann die OOP?
          Natürlich abgesehen, von der Programmsicherheit, die bei gut gebauten Klassen dann Fehlermeldungen bis zum Abwinken schmeißt.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      1. Hello,

        Dem kann ich nun wirklich nicht zustimmen!
        Ich Programmiere schon seit langen in verschiedenen OO Sprachen, und dies auch ohne eine "praktische" IDE.

        Diese Aussage kann ich nun nicht validieren und ich weiß auch nicht, wem Du den Tipp gegeben hast mit der OOP-Einführung.

        Masse ist auch nicht Klasse, aber wenn Du täglich ca. 1.000 Zeilen (Statements) beständigen Code (dazu sind dann bestimmt manchmal 5.000 bis 10.000 Zeilen "Versuche" notwendig oder eben ein Spitzen-Pflichtenheft nebst Feinkonzept - wer hat das schon?) schaffen sollst, dann stehst  Du mit so einer Blindflug-Sprache wie PHP-OOP schon ziemlich an der Kante.

        Die Zahlen sollen hier sicherlich nur exemplarisch sein un dbeziehen sich auch nur auf die neuen Funktionalitäten, nicht auf Copy 'n Paste oder 'Include' ;-)

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi Tom!

          Masse ist auch nicht Klasse, aber wenn Du täglich ca. 1.000 Zeilen (Statements) beständigen Code (dazu sind dann bestimmt manchmal 5.000 bis 10.000 Zeilen "Versuche" notwendig oder eben ein Spitzen-Pflichtenheft nebst Feinkonzept - wer hat das schon?) schaffen sollst, dann stehst  Du mit so einer Blindflug-Sprache wie PHP-OOP schon ziemlich an der Kante.

          Das verstehe ich jetzt nicht. Du willst täglich 1000 Zeilen Code erstellen, und schreibst dafür das 5-10 fache an Code? Ich habe jedenfalls sehr gute Erfahrungen mit Zend Studio gemacht, allerdings mag ich mir nicht alles von einer IDE vorgeben lassen. Was ich an Zend Studio sehr schätze ist der in meinen Augen hervorragende Editor. Ein wirklich nettes Feature ist, dass wenn ich eine Variable, eine Funktion oder eine Klasse eingebe, macht mir der Editor Vorschläge zur Auto-Vervollständigung, bei Klassen z.B. für die entsprechenden Methoden, und bei Funktionen/Methoden zeigt er mir dessen Signatur an. Sowohl bei PHP-Funktionen/Klassen, als auch bei eigenen. Leider ist das Teil nicht gerade ein Schnäppchen...

          Außerdem gibt es in PHP 5 "__autoload()",  wenn man vernünftig damit arbeitet, muss man sich nicht mehr um includes kümmern.

          Grüße
          Andreas

          --
          SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
          1. Hello,

            Zend Studio

            Danke, genau das wollte ich wissen!

            Das wird angeschafft. Mal sehen, ob wir dann nicht auch auf den Zend-Compiler nebst Runtime umsteigen. Die Projekte sind langsam einfach zu aufwändig, um sie total kopierbar zu machen.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hi!

              Zend Studio

              Das wird angeschafft.

              davon gibt es auch eine Evaluierungs-Version.

              Mal sehen, ob wir dann nicht auch auf den Zend-Compiler nebst Runtime umsteigen.

              Hm? Meinst Du den Opcode-Cache? Ja der ist nett, aber sehr teuer. PECL::APC reicht mir bisher, und ist auch nicht langsamer. Vor allem sind daran Entwickler beteiligt, von denen ich sehr viel halte (unter anderem Rasmus Lerdorf  )...

              Die Projekte sind langsam einfach zu aufwändig, um sie total kopierbar zu machen.

              "kopierbar"?

              Grüße
              Andreas

              --
              SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
              1. Hello,

                Die Projekte sind langsam einfach zu aufwändig, um sie total kopierbar zu machen.
                "kopierbar"?

                Ja, soll nicht immer OpenSource dabei entstehen... Manche Sachen will man auch zweimal verkaufen ;-)

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Hi!

                  "kopierbar"?

                  Ja, soll nicht immer OpenSource dabei entstehen... Manche Sachen will man auch zweimal verkaufen ;-)

                  Warum muss aufgrund irgendeines Editors OpenSource entstehen?

                  Grüße
                  Andreas

                  --
                  SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
                  1. Hello,

                    "kopierbar"?

                    Ja, soll nicht immer OpenSource dabei entstehen... Manche Sachen will man auch zweimal verkaufen ;-)
                    Warum muss aufgrund irgendeines Editors OpenSource entstehen?

                    Wenn man die Applikation im Source-Code hat, wird sie das von ganz alleine, wenn auch illegal. Du glaubst ja wohl nicht, dass Scripte, die man ausliefert, ausschließlich auf dem Server bleiben, für den man sie vorgesehen hat. Die Zend Engine arbeitet mit "compiliertem" Code, der nicht so einfach wieder in Sourcecode zurückverwandelt werden kann.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Hoi!

                      Wenn man die Applikation im Source-Code hat, wird sie das von ganz alleine, wenn auch illegal. Du glaubst ja wohl nicht, dass Scripte, die man ausliefert, ausschließlich auf dem Server bleiben, für den man sie vorgesehen hat.

                      Ah so meinst Du das ;-)

                      Die Zend Engine arbeitet mit "compiliertem" Code, der nicht so einfach wieder in Sourcecode zurückverwandelt werden kann.

                      Ach Du meinst den Zend Encoder? Sowas gibt es auch (billiger) von IonCube, und es gibt noch http://pecl.php.net/package/bcompiler
                      Auch der Turck-Cache kann das, allerdings entwickelt der Autor diesen nicht mehr weiter.

                      Grüße
                      Andreas

                      --
                      SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
                      1. Hello,

                        Ach Du meinst den Zend Encoder? Sowas gibt es auch (billiger) von IonCube, und es gibt noch http://pecl.php.net/package/bcompiler
                        Auch der Turck-Cache kann das, allerdings entwickelt der Autor diesen nicht mehr weiter.

                        Hast davon schon was erfolgreich benutzt?

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        1. Hi!

                          Ach Du meinst den Zend Encoder? Sowas gibt es auch (billiger) von IonCube, und es gibt noch http://pecl.php.net/package/bcompiler
                          Auch der Turck-Cache kann das, allerdings entwickelt der Autor diesen nicht mehr weiter.

                          Hast davon schon was erfolgreich benutzt?

                          Ich habe früher TurckMM-Cache eingesetzt, und dabei mal mit dessen Encoder-Möglichkeiten gespielt. Das funktionierte ganz ohne Probleme.
                          Leider ist es prinzipiell nicht möglich / sinnfrei einen Opcode-Cache zusammen mit einem Encoder einzusetzen. Da ich die letzte Zeit nur Software auf eigenen Servern einsetze, nehme ich dann doch lieber die Vorzüge eines Opcode-Cache in Anspruch.

                          Allerdings setze ich Turck schon lange nicht mehr ein, sondern PECL::APC. Zend ist von der Stabilität sicher sehr weit vorrne, aber auch beim Preis. Wenn Projekte in PECL als stabil markiert sind, ist das meine erste Wahl. Im Moment würde ich glaube ich den IonCube Encoder einsetzen. Das habe ich auch irgendwann mal ausprobiert, und lief gut. Der von denen angebote PHP-Accelerator ist allerdings nicht mehr auf der Höhe der Zeit.

                          Grüße
                          Andreas

                          --
                          SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
  2. Also ich habe mit PHP eigentlich nie objektorientiert programmiert. Jetzt wollte ich mit das mit PHP5 mal genauer ansehen, habe mir Texte dazu gesucht und ein paar Beispielscripte geschrieben.

    eigentlich schade, denn oop ist schon länger möglich.

    Es ergeben sich nun für mich einige Fragen. Leider finde ich keine richtige Anleitung und auch keine Doku, die die Builtin-Objekte beschreibt. Ich hab mir mal alle Klassen ausgeben lassen, die bei PHP eingebaut sind.
    Da finde ich jetzt auch eine Array-Klasse und Iterator-Klassen dafür. Sieht interessant aus. Aber wie nutze ich die? Ich finde keine Doku. Im deutschen PHP-Handbuch steht noch nichts dazu.
    Welche Parameter erwarten die Kontruktoren? Welche Eigenschaften gibt es? Welche Methoden sind implementiert? Welche kann/muß ich überschreiben? Die Klassen müssen doch irgendwo genau beschrieben sein, oder?

    oop ist keine php spezialität. versuche lieber oop an sich zu verstehen.

    Was ist in PHP der Unterschied zwischen :: und -> ?
    Ich habe durch Versuch rausgefunden, daß self::irgendwas das eigene Objekt anspricht und das ich mit parent:: die Klasse von der ich abgeleitet habe anspreche. Gibt es da noch mehr festgelegte Bezeichnungen?

    klasse::methode() ist ein statischer aufruf. es benötigt keine instanz.

    objekt->methode() ist ein dynamischer aufruf. es muß ein objekt (instanz dieser klasse) geben.

    Kann ich ein Objekt explizit zerstören und den Speicher freigeben?
    Gibt es sowas in der Art?
    $a = new my_obj();
    delete( $a );

    unset($a);

  3. Hi!

    Da finde ich jetzt auch eine Array-Klasse und Iterator-Klassen dafür. Sieht interessant aus. Aber wie nutze ich die? Ich finde keine Doku. Im deutschen PHP-Handbuch steht noch nichts dazu.

    Naja, halt in englisch: http://de3.php.net/spl

    Kennt jemand gute Links (deutsch bevorzugt, englisch auch ok),

    http://de3.php.net/oop
    http://de3.php.net/oop5
    http://de3.php.net/migration5

    Was ist in PHP der Unterschied zwischen :: und -> ?
    Ich habe durch Versuch rausgefunden, daß self::irgendwas das eigene Objekt anspricht und das ich mit parent:: die Klasse von der ich abgeleitet habe anspreche.

    http://de3.php.net/manual/en/language.oop5.paamayim-nekudotayim.php

    Gibt es da noch mehr festgelegte Bezeichnungen?

    Lies Dir die Beschreibung des Objekt-Modells im Manual durch. Es gibt z.B. noch $this, eine Referenz auf das eigene Objekt: http://de3.php.net/manual/en/language.oop.php#keyword.class, http://php-faq.de/q/q-klassen-this.html

    Kann ich ein Objekt explizit zerstören und den Speicher freigeben?
    Gibt es sowas in der Art?
    $a = new my_obj();
    delete( $a );

    Man kann sowas machen:
    $a = NULL;
    http://de3.php.net/manual/en/language.oop5.basic.php

    aber man sollte sich auch bzgl. "Reference Counting" informieren:
    http://www.zend.com/zend/art/ref-count.php
    (bzw. im Moment: http://www.google.de/search?q=cache:Woce8ffwrE8J:www.zend.com%2Fzend%2Fart%2Fref-count.php+reference+counting+zend&hl=de&start=1)

    und sonst:
    http://talks.php.net/index.php/PHP+5
    http://tut.php-q.net/klassen.html

    Grüße
    Andreas

    --
    SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/