tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
589
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MasterGeo MasterGeo ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    75
    Hallo Leute,

    mein erster Versuch eine Klasse zu schreiben geht schon in die Hose.


    <?PHP

    class ge_test
    {
    var $name;
    $this->name = $this->name ." war erfolgreich";
    }

    $myclass = new ge_test;
    $myclass->name = "test";

    ?>

    Er gibt mir in Line 9 folgenden Fehler (wo $this->name = ... steht):

    Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}''

    Man ist das frustrierend. Wäre nett wenn mir einer auf die Sprünge helfen könnte.

    Thanx Georg
    Geändert von MasterGeo (18.08.02 um 18:37 Uhr)
     

  2. #2
    Avatar von BlackJack
    BlackJack BlackJack ist offline Mitglied Silber
    Registriert seit
    May 2001
    Ort
    Bremen
    Beiträge
    66
    PHP-Code:
    $this->name $this->name ." war erfolgreich"
    Ich glaub so einfach geht das nicht und wenn dann auch nur ohne leerzeichen glaub ich.
    ansonsten versuch doch mal das so zu machen:
    PHP-Code:
    $this->name $this->name " war erfolgreich"
     

  3. #3
    MasterGeo MasterGeo ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    75
    Sorry aber das war nicht die Lösung.
    Auch ein einfaches

    echo "test war erfolgreich";

    an der Stelle gibt den gleichen Fehler aus.
    Irgendwie mache ich da was grundlegendes falsch.

    Aber vielen Dank für den Versuch.
     

  4. #4
    Avatar von BlackJack
    BlackJack BlackJack ist offline Mitglied Silber
    Registriert seit
    May 2001
    Ort
    Bremen
    Beiträge
    66
    Ich bin mir gerade überhaupt nicht sicher ob du überhaupt einfach so die variable zuweisen kannst

    versuch das mal so (mit ner funktion):
    PHP-Code:
    <?PHP 

    class ge_test 

        var 
    $name
        function 
    ge_name($this->name){
            echo 
    $this->name ." war erfolgreich"
        }


    $myclass = new ge_test
    $myclass->ge_name(test); 

    ?>
     

  5. #5
    Registriert seit
    Apr 2001
    Ort
    Hamburg
    Beiträge
    1.309
    Also die Variable kannst du "leider" ohne weiteres nach Anlegen des Objektes direkt verändern, aber alles weitere musst du in eine Methode packen.
    PHP-Code:
    <?PHP

    class ge_test
    {
        var 
    $name;
        function 
    echoVar()
        {
                 echo 
    $this->name." war erfolgreich.";
        }

    }

    $myclass = new ge_test();
    $myclass->name "test";
    $myclass->echoVar();

    ?>
    Geändert von Patrick Kamin (19.08.02 um 00:56 Uhr)
     
    --
    GNU/Linux - Weil man echte Freunde nicht kaufen kann

  6. #6
    MasterGeo MasterGeo ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    75
    Vielen Dank! So richtig verstehen, tue ich es noch immer nicht. Aber ich weiß jetzt was man nicht machen kann.
     

  7. #7
    F.o.G. F.o.G. ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Beiträge
    239
    Was du da mit var ... anlegst, sind Klassenvariablen. Das sind die einzigen Befehle, die du nicht in Methoden packen musst.

    Methoden sind dazu da, den Code zu modularisieren. Damit hast du dann kleine Einheiten, die eine bestimmte Funktion erfüllen sollen. Würdest du den Code innerhalb der Klasse wieder so runterrasseln wie bisher, würdest du nicht objektorientiert sondern wie gehabt strukturiert programmieren.

    Stell dir immer vor, dass du mit dieser Klassen, also deiner Schablone ein bestimmtes Objekt formen willst. Was du mit diesem Objekt machen können willst, muss in Methoden, also den Eigenschaften des Objekts gepackt werden.

    Beim Objekt Auto sorgt die Methode gasGeben() halt für mehr GEschwindigkeit, bremsen() für das Bremsen und ausfallInDerLenkungUndResultierenderUnfall() für den entsprechenden Schaden.

    Hoffe ich hab mich verständlich ausgedrückt und dass dir das Thema OOP ein klitzkleines bisschen klarer geworden ist.

    Ciao, F.o.G.
     

  8. #8
    Registriert seit
    Apr 2001
    Ort
    Hamburg
    Beiträge
    1.309
    Ich liebe das Beispiel Auto bei Klassen.
    Welches Buch liest du gerade?
     
    --
    GNU/Linux - Weil man echte Freunde nicht kaufen kann

  9. #9
    F.o.G. F.o.G. ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Beiträge
    239
    Also die Objektorientierung hab ich nicht durch PHP gelernt sondern durch Java. Da dort ALLES in Klassen gepackt werden muss, lernt man das Prinzip sehr schnell. Dort hab ich das Buch 'Jetzt lerne ich Java' vom M&T Verlag gelesen, weil es nur 10 € gekostet hatte.

    Bei PHP kann ich für Anfänger PHP 4 von Jörg Krause empfehlen. Der kommt zwar aus der ASP Welt, kann aber gut erklären.

    Bei Mysql ist das Buch MySQL von Michael Kofler EXTREM gut.

    Demnächst hol ich mir noch PHP Deluxe. Ansonsten les ich das PHP Magazin wo neulich auch ein guter Artikel zu OOP in PHP drin war. Naja, letztendlich ist OOP für mich sehr wichtig, da ich damit den Usern meines CMS Klassen in die Hand geben kann, mit denen sie leicht die Artikel und andere Funktionen in Ihre Webseite einbinden können.

    Ansonsten: einfach an Autos denken

    Ciao, F.o.G.
     

  10. #10
    MasterGeo MasterGeo ist offline Mitglied Silber
    Registriert seit
    Jan 2002
    Beiträge
    75
    Hallo Fog,

    soweit ich das mit den OOP verstanden habe, besteht eine Klasse aus Methoden und Eigenschaften. Wenn wir beim Beispiel Auto bleiben sind die Methoden nichts weiteres als Funktionen wie Gasgeben. Eigenschaften würden den Klassenvariablen entsprechen, wie zum Beispiel Räder=4. Wieso ich diese Variabel nicht direkt ausgeben kann
    weiß ich jetzt, aber den Sinn verstehe ich nicht. Es mach natürlich wenig Sinn eine Klasse zu schreiben die nur ein echo enthält. Es sollte mir auch nur beim debuggen helfen.
    Was für mich noch zimlich schleierhaft ist sind die Konstruktoren. Wofür brauche ich die?

    Übrigens Jörg Kraus habe ich auch und halte es auch für ein gutes Referenz-Buch. Aber OOP z.B. kann man aus dem Buch nicht lernen.
     

  11. #11
    F.o.G. F.o.G. ist offline Mitglied Gold
    Registriert seit
    Mar 2002
    Beiträge
    239
    Also die Klassenvariablen haben schon einen Sinn: sie sind der 'globale' (für die gesamte Klasse geltende) Informationsspeicher, während innerhalb der Methoden lokale Variablen deklariert werden. Da man mit der return Anweisung nur eine Variable zurückgeben kann, kann man so die Ergebnisse von Berechnungen der ganzen Klasse zur Verfügung stellen.

    Konstruktoren kann man zum Anlegen von Startwerten verwenden. Wenn man möchte, dass eine gewisse Klassenvariable per Default schon Werte zugewiesen bekommt, kann man das da machen. Ausserdem kann man ja einem Konstruktor auch Parameter übergeben.

    ein Beispiel:
    PHP-Code:
    <?php
    class Test {
       function 
    Test($startwert1$startwert2) {
          
    $this->wert1 $startwert1;
          
    $this->wert2 $startwert2;
       }
    }

    $myTest = new Test("1""2");
    ?>
    Was ich aber noch wichtiger finde, ist dass man das ganze überschreiben kann. Ich habe zum Beispiel eine Tabelle, in der Rubriken gespeichert werden. Jede Rubrik kann wieder Töchter haben usw. Meine Klasse nimmt nun alle Datensätze und geht sie durch, stellt eine Hierarchie auf und mit speziellen Methoden kann man dann den HierarchieBaum darstellen.
    Nun lege ich in einem sehr einfachen Konstruktor fest, dass die Einrückungstiefe pro Hierarchielevel ein paar Pixel beträgt. Wenn ich das aber in einer anderen Situation nicht mehr so haben will, kann ich die Klasse ableiten, einen neuen Konstruktor hinzufügen und alles arbeitet mit der neuen Einrückungstiefe, ohne auch nur einmal die Basisklasse verändert zu haben. Im Beispiel könnte das so aussehen:

    PHP-Code:
    <?php
    class Test2 extends Test {
       function 
    Test($startwert1$startwert2) {
          
    $this->wert1 $startwert1;
          
    $this->wert2 $startwert2 2;
       }
    }

    $myTest = new Test2("1""2");
    ?>
    Wie gesagt: Konstruktoren sind zum setzen von Startwerten da.

    Mit Krause und OOP hast du recht, daher hab ich den Dreh erst bei der Java Programmierung gefunden. Aber mittlerweile möchte ich es in bestimmten Situationen nicht mehr missen.

    Ciao, F.o.G.
     

  12. #12
    petermedien petermedien ist offline Mitglied Bronze
    Registriert seit
    Sep 2002
    Ort
    Friedelsheim
    Beiträge
    34
    @F.o.G.

    Lob, Lob, rechtslinksschulterklopf&haendeschuettel

    Super, so habe ich noch nie die Gundzüge der OOP
    erklärt gesehen.

    Schreibe doch mal ein Tut über dieses Thema. Ich habe
    erst seit kurzer Zeit mit PHP begonnen und vorher nur
    so ein bisschen Rumprogrammiert im Web.

    Habe mir erlaubt, dich dafür per Bewertung zu loben

    So weiss ich, wie schwer es ist, die Sache richtig unter
    einen Hut zu bekommen.

    Frage, seit wann progst du schon mit PHP?


    Gruss
    Peter
     
    :smoke:,,:smoke:

Ähnliche Themen

  1. Meine erste Erde! ;)
    Von Envelope im Forum 3D-Stills
    Antworten: 3
    Letzter Beitrag: 09.10.09, 22:39
  2. meine erste seite
    Von Fugee21 im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 19.11.07, 21:23
  3. Meine erste Grafik!
    Von CaNNaBis im Forum Photoshop
    Antworten: 16
    Letzter Beitrag: 08.02.02, 17:29