PHP5 class association

dennisnowack

Mitglied
Hi@all!
Irgendwie möchte der Code nicht laufen... ich denke er ist selbsterklärend... Ich möchte Waffe eben nur in Held nutzen sofern der Held eine Waffe trägt...
das Resultat findet ihr zZ unter http://84.16.224.162/browsergame/test.php
Für jegliche Hilfe bin ich dankbar, habe es extra vereinfacht!


class held {

var $level = 0;
var $waffenid = 1;
var $waffe;

public function held () {
$this->level = 8;
}

public function damage () {
$dmg = $this->waffe->exp * $this->level;
return $dmg;
}

public function init_waffe() {
$this->waffe = new waffe();
}

}

class waffe {

var $exp = 0;

public function waffe () {
$this->exp = 111;
}

public function set () {
$this->exp = 22;
}
}

$brutus = new held;
echo "Level: " . $brutus->level . "<br/>";
echo "Waffe: " . $brutus->waffenid . "<br/>";
echo "Waffen-Exp ohne init: " . $brutus->waffe->exp . "<br/>";
echo "Damage eig 0: " . $brutus->damage() . "<br/>";
if($brutus->waffe!=0)
$brutus->init_waffe;
echo "Waffen-Exp nach init eig 111: " . $brutus->waffe->exp . "<br/>";
echo "Damage nun eig 888: " . $brutus->damage() . "<br/>";
$brutus->waffe->set();
echo "Waffen-Exp nach set: " . $brutus->waffe->exp . "<br/>";
echo "Damage nun eig 176: " . $brutus->damage() . "<br/>";
 
Zuletzt bearbeitet:
Da liegt der fehler $brutus->waffe->set();
Du mußt die Klasse waffe als extends laden oder ein objekt davon erzeugen

Versuchmal so

$brutus->set();

Mfg Splasch
 
Zuletzt bearbeitet:
Schon das erste $brutus->waffe->exp erzeugt einen Fehler, da $brutus->waffe zu dem Zeitpunkt kein Objekt ist sondern NULL.
 
wie genau? Sorry dass ich mich dumm anstelle, nur war bsher OOP von einigen anderern Sprachen gewöhnt, nur nicht PHP :rolleyes:
class waffe extends held
bringt es acuh nicht... und ein Objekt erzeugen kommt dem Sinnd er Sache nicht zu gute... Laut Tutorial auf irgendeiner Seite müsste das eiiiiigentlich so funktionieren; vielleicht ein Versionsproblem?
Hätte es auch mit aggregate() lösen können, das allerdings wird an vielen Stellen nicht empfohlen...
 
So in etwa

PHP:
class held {

var $level = 0;
var $waffenid = 1;
var $waffe;

public function held () {
$this->level = 8;
}

public function damage () {
$dmg = $this->waffe->exp * $this->level;
return $dmg;
}

}

class waffe extends held  {

var $exp = 0;

public function waffe () {
$this->exp = 111;
}

public function set () {
$this->exp = 22;
}
}

$brutus = new waffe;
echo "Level: " . $brutus->level . "<br/>";
echo "Waffen-Exp ohne init: " . $brutus->waffe. "<br/>";

Mfg Splasch
 
Zuletzt bearbeitet:
Guuuuut, danke für den Code, nur wenn ich dann noch zusätzlich zumindest "nur" Schild und Klasse habe selbiger Art, dann kann ich das doch nicht so lösen:
$brutus = new waffe;
...
$brutus = new schild;
...
Das einfachste wäre, einfach ALLE funktionen in die Klasse Held zu schreiben, das wird mir allerdings zu unübersichtlich...

Danke! :)

p.s.: oder habe ich soeben komplett den Durchblick verloren...?!
 
Zuletzt bearbeitet:
Klar geht das alle kind klassen werden mit übernohmen
Du mußt bei new nur die unters klasse angeben und hast in der dann alles drin.

Bei Schild machste eine extends von waffe

So mit hat in schild dann waffe und held drin

Mfg Splasch
 
Nice, thanks!

Dann werde ich das doch gleich mal testen!

Bei Schweirigkeiten werd ich wieder posten, ansonsten einen schlönen Rest-Abend!

Dennis
 
Du sollte eben nur die Funktionname dann eindeutig bennen damit keine Überschneidung gibt.

Bsp waff_set ,schild_set unsw,

Mfg Splasch
 
Zurück