Browsergame - Ressourcenanzeige in PHP programmieren

Ach du Schande ist das kompliziert.

Am Anfang scheint es kompliziert, aber bei OOP muss man sich erstmal angewöhnen, objekt-orientiert zu denken. Du bist da schon auf einem guten Weg :-)

Wie oben schon geschrieben kommt halt jetzt ne Fehlermeldung, wegen diesen "new Exception".

Was macht eigentlich dieses throw new Exception? Es sieht irgendwie aus, als würde das nur etwas ausgeben, so wie echo.

Eine Exception wirft (throw) man dann, wenn man den weiteren Ablauf aufgrund einer bestimmten Bedingung oder eines Fehlers nicht weiter ausführen lassen will. Das ist vergleichbar mit "gib einen Fehler mit echo aus, und geh dann mit return aus der Funktion raus". Das Werfen einer Exception führt aber sogar noch dazu, dass wenn deine Methode, in der die Exception geworfen wird, verlassen wird, auch die aufrufende Methode nicht weiter verarbeitet wird. Das geht solange im Aufruf-Baum (Call-Stack) zurück, bis die Exception gefangen (catch) wird. Hier ein Beispiel:

PHP:
class B
{
  public function machWasKomplettAnderes()
  {
    // hier die mega-wichtige Geschäftslogik der machWas-Methode

    /*** ..... ***/
   $wert = false;
   
    // Und eine Bedingung, die eine Exception verursachen wird:
    if( $wert == false )
    {
       throw new Exception("Was zur Hölle...");
    }
  }
}

class A
{
  public function machWas()
  {
    // Erzeuge eine neue Instanz von B
    $b = new B();
    // Rufe ne Methode von B auf
    $b->machWasKomplettAnderes();

    // Der Code hier wird nicht mehr ausgeführt werden:
    $c = 5;
    echo $c;
  }
}

// Exception-Handling - abfangen von Exceptions
try
{
  $a = new A();
  $a->machWas();
}
catch(Exception $ex)
{
  // Hier kommt der Text der Exception aus B an und kann mittels getMessage()-Methode abgeholt und dargestellt werden
  echo $ex->getMessage();
}

Glaub mir, wenn du das Prinzip mal verstanden hast, wirst du die Vorteile darin erkennen - Exceptions sparen viel Zeit beim Debuggen.
 
Ich habe mal saftmeisters Code zur hand genommen und die Klasse komplett von Datenbankkram bereinigt. (Eine Klasse = eine Zuständigkeit)

Mit der Klasse kannst du dann auch weitere berechnungen durchführen bzw auch absolute Beträge abziehen und hinzufügen. Am Ende musst du das Ressource-Objekt nur wieder serialisiern (also wieder in die datenbank schreiben).

PHP:
<?php
/**
 * Ressource
 */
class Ressource
{

	public $id;
	public $name;
	public $amount;
	public $time;
	public $factor;

Attributsnamen in Mapper-Klassen müssen AFAIK zu den Select-Spaltennamen passen, sonst funktioniert die Reflection nicht.
 
Ja, klar, sorry, hab ich jetzt garnicht mehr so drauf geachtet :(

edit//
Vielleicht funtinierts ja mit ALIASen, ansosnten musst du du die Implementierung des Mappers ändern.
 
Zuletzt bearbeitet:
Zurück