PHP5 class association

Moment, wie was jetzt

Okay, Gumbo du siehst wohl mehr als ich... was fehlt(e)?

wow, jetzt habt ihr mich beide verwirrt - sowas passiert selten... hehe
 
Zuletzt bearbeitet:
Waffe ist doch keine Erweiterung von Held? Dennis’ Ansatz war schon richig. Nur war die Waffe noch nicht instanziiert, das heißt der Held hatte noch keine

Wie man das Löst bleibt natürlich seine Sache. Aber du hast schon recht wenn von einen Spiel ausgeht dann würd ich das auch anderen angehehen.

Den Held mal weg lassen.

Und zuerst mal alle Waffen erzeugen und dies kann man nacher dann den Held zuweisen.

Ich liste mal auf

Waffe
.. schild
...keule
..schwert
unsw.

Dann machste die Held klasse
und übergibst im die Waffe.

Mfg Splasch
 
Zuletzt bearbeitet:
Du musst zuerst $brutus->init_waffe() aufrufen. Erst dann ist $brutus->waffe ein Objekt der Klasse „waffe“ und besitzt die Methode set().
 
Okay, klingt beides einleuchtend....

Nur, Gumbo, was tue ich, wenn ein Held dann keine Waffe trägt? Was acuh machbar ist;
mein gedanke dabei war dass entweder PHP mit Glück 0 ausgibt oder ich ein @ vor die Zeilen schiebe - korrekt?
 
Bei so eine Game ergeben sich viele sitationen. Eben abhängig vom Konzept wie es geplannt ist.

Je nachdem sollte man sich zuerst überlegen wie man die Klassen dann am sinvollsten aufbauen kann.

Bsp gibt es mehre Helden ? können alle die selben waffen nutzen oder einige davon welche nicht bwz haben einige davon andere Fähigkeiten unsw.

Bein inilizieren einer waffe muß ja nicht gleich auch eine Waffe zugewiesen werden dann were genau der fall das er momentan keine hat davon.

Mfg Splasch
 
Habe den Fehler gefunden!

Kann ihn irgendwer erklären?

Also, wenn ich keine eigene Funktion init_waffe baue sondern
$this->waffe = new waffe
direkt in den Konstruktor von Held schreibe, klappt es...

Nur WIESO klappt es in der eignen Funktion nicht, selbst wenn ich sofort am Anfang theoretisch init_waffe aufrufe?

Danke euch für die Gedankenanregungen!
 
Dann brauchst du eine Routine, die prüft, ob der Held eine Waffe trägt und diese zurückgibt. Beispielsweise:
PHP:
class Hero
{
	private $name;
	private $weapon;

	public function __construct( $name )
	{
		if (!is_string($name)) {
			return false;
		}
		$this->name = $name;
	}

	public function getName()
	{
		return $this->name;
	}

	public function hasWeapon()
	{
		return !empty($this->weapon);
	}

	public function &getWeapon()
	{
		if (!$this->hasWeapon()) {
			$retVal = false;
			return $retVal;
		}
		return $this->weapon;
	}

	public function setWeapon( &$weapon )
	{
		if (!is_object($weapon) || get_class($weapon)!='Weapon') {
			return false;
		}
		$this->weapon = $weapon;
		return true;
	}

	public function __toString()
	{
		return $this->getName();
	}
}

class Weapon
{
	private $name;

	public function __construct( $name )
	{
		if (!is_string($name)) {
			return false;
		}
		$this->name = $name;
	}

	public function getName()
	{
		return $this->name;
	}

	public function __toString()
	{
		return $this->getName();
	}
}


$held = new Hero('Brutus');
if (!$held->hasWeapon()) {
	echo "{$held} ist unbewaffnet.";
}
if ($held->setWeapon(new Weapon('Schwert'))) {
	echo "{$held} trägt nun die Waffe {$held->getWeapon()}.";
}
 
Zurück