• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

OOP Fragen

Status
Für weitere Antworten geschlossen.

m0sT

Neues Mitglied
Hi,
ich hab jetzt angefangen endlich mal OOP zu machen,
jetzt hab ich aber ein paar Fragen, keine schweren ;)

1. Wenn ich eine Klasse schreibe:

PHP:
class Konto {
//...
und meine erste Methode so nenne, wie die Klasse auch heißt:

class Konto {

var $kontostand;
// vars...

public function Konto($betrag) {
$this->kontostand = $betrag;
}[/php]

kann ich dann direkt so eine Klasse erzeugen:

PHP:
$mueller = new Konto(100);
normalerweise hatte ich es immer so:

PHP:
class Konto {

var $kontostand;

public funtion einzahlen($betrag) {
$this->kontostand = $betrag;
}
...


$mueller = new Konto;
$mueller->einzahlen(100);
Es würde zwar alles nur vereinfachen, interessiert mich aber!

2. kann ich in einer klasse eine klasse erstellen?

PHP:
class Konto {  
  
 var $kunde;
 var $kontonummer;
 var  $bankleitzahl = 50050201;
 var $institut = "Frankfurter Sparkasse";
 var  $kontostand;  
 var $stuhl;   


public function  neuerKunde($name,$geld,$kontonummer) {  
 if ($geld == "") 
 $geld = 0;   
$this->kunde = $name;
$this->kontostand =  $geld;
$this->kontonummer = $kontonummer;                     
}   

public function einzahlen($betrag) {   
$this->kontostand =  $kontostand+$betrag;                
}   
public function abheben($betrag) {   
$this->kontostand =  $kontostand-$betrag;       
}   
public function zeigedatenKonto() {   
echo $this->kunde;
echo  "<br>hat&nbsp;";
echo $this->kontostand."Euro.";
echo  "<br>Sein  Institut:&nbsp;".$this->institut."&nbsp;(".$this->bankleitzahl.")";
echo  "<br>Kontonummer:&nbsp;".$this->kontonummer."<br><br>";          
} 
}
und ich will in der klasse:

PHP:
class stuhl extends Konto {       }
herrn müller einen stuhl geben, dann muss es ja so in der art lauten:

class stuhl extends Konto {
$mueller = new Konto;
public function givestuhl($preis) {
$mueller->kontostand = $kontostand - $preis;
$mueller->stuhl = "ja";
}
}
[/php]

oder irre ich mich da?
ich bekomme nämlich immer eine fehlermeldung wenn ich
klassen in klassen def. will...

Parse error: parse error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Dokumente und Einstellungen\Root\Eigene Dateien\XAMPP\xampplite\htdocs\root\oop\klassen1.php on line 118
3. ich habe gelernt, dass ich eine klasse abstrahieren kann:

PHP:
abstract class AbstrakteKlasse {
  public abstract function methode();
}
in dieser klassee werden alle functionen, die ich in einer anderen implementierenden klasse benötige, erstellt.
aber wozu???

PHP:
class implKlasse extends AbstrakteKlasse {
public function methode() {
doany();
}
}
4.

ich lese als methodennamen häufig __construct und __destruct.
ist das beliebig oder hat das auch eine bedeutung?


danke erstmal :)

mosT
 
Zuletzt bearbeitet:
Hallo,
Ich kann dir nicht zu jeder Frage antworten, aber ein paar Fragen versuche ich zu beantworten:
1. Keine Ahnung.
2. Erstelle doch eine Elternklasse und dann die Subklasse. Sprich:
PHP:
<?php
class test {
//bla
}
class hallo extends test {
//bla
}
?>
3. Tut mir leid, weiss ich auch nicht.
4. Mit _construct erstellt man den Konstruktor der Klasse, denn man eigentlich immer so erstellen und auch immer so nennen sollte. Im Konstruktor werden z.B. Werte definiert etc. etc.
Gruß
 
1. Ja, du kannst eine Klasse so instanzieren. In PHP5 ist aber die Verwendung einer Funktion, die den gleichen Namen trägt wie die Klasse selbst, als Konstruktor durch die "magische" Funktion __construct() abgelöst worden.

2. Du kannst in einer Klasse beliebig viele Instanzen dieser oder anderer Klassen erstellen. Ich sehe aber grad in deinem Beispiel nicht, das dort eine Klasseninstanz erzeugt wird.
Wenn du ein Kind einer Elternklasse erstellen willst (nännt sich Verärbung) ist die Syntax die du angegeben hast schon nicht ganz falsch. Allerdings musst du beachten, das alle Methoden der Elternklasse (in deinem Fall Konto) für das Kind übernommen werden, es sei denn sie wurden als private deklariert. Demzufolge wird auch mein Instanzieren deiner Kindklasse (in deinem Fall stuhl) der Konstruktor der Elternklasse aufgerufen, da du diesen nicht explizit überschreibst. Ein kleines Beispiel zur Verdeutlichung:
PHP:
class Konto {
     protected $name;

     public function __construct($name) {
          $this->name = $name;
     }
}
class Person extends Konto {
     public function getName() {
          return $this->name;
     }
}
$person = new Person('Hans');
echo $person->getName();
Das obige Beispiel wird 'Hans' ausgeben.
Wenn noch Fragen zur Vererbung sind dann frag ruhig :).

3. Eine abstrakte Klasse benutzt man, um eine Struktur vorzugeben. So müssen in den abgeleiteten Klassen sämtliche in der abstrakten Klasse definierten Funktionen implementiert sein. Das ganze macht mehr Sinn, wenn man man mit mehreren Leuten an einem Projekt arbeitet.

4. Ist ja schon einigermassen durch 1. beschrieben.
Diese Funktionen bezeichnet man als Konstruktor bzw. Destruktor und werden aufgerufen wenn eine Klasse instanziert wird order das entsprechende Objekt gelöscht wird. Die __destruct() Methode macht in PHP aber wenig Sinn, da in seiner solchen Methode normalerweise nicht mehr benötigte Dinge (Variablen, Objekte) entfernt werden um somit Resourcen zu sparen. Da PHP aber einen Garbagecollector besitzt und diese Aufgabe für einen übernimmt, muss man sich über den Destruktor keine Gedanken machen.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben