<?php
+/**
+ * A general ship class for all other kinds of ships even small sail ships
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
class BaseShip extends BaseSimulator {
// Name des Shipes
private $shipName = "Unbekanntes Schiff";
private $structures = null;
// Namenloses Ship generieren
- private function __construct($class) {
+ protected function __construct($class) {
// Call parent constructor
- parent::constructor($class);
+ parent::__construct($class);
- // Beim Schiff angelangt
- if (((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT')))
- $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
- __CLASS__,
- __LINE__
- ));
+ // Set object description
+ $this->setObjectDescription("Allgemeines Schiff");
- // Bezeichnung setzen
- $this->setPartDescr("Schiff");
-
- // Array-Objekt generieren
+ // Prepare array object for all structures
$this->createStructuresArray();
-
- // Instanz entfernen
+
+ // Clean-up a little
$this->removePartInstance();
$this->removeNumberFormaters();
}
- // Konstruktor aufrufen
- public function constructor ($class) {
- $this->__construct($class);
- }
-
// Array-Objekt anlegen
private function createStructuresArray () {
- $this->structures = new FrameworkArrayObject();
+ $this->structures = new FrameworkArrayObject("FakedShipStructures");
}
// Schiffsteil generieren (kann alles sein)
// Ist die gewuenschte Klasse vorhanden?
if (class_exists($partClass)) {
- // Befehl zusammenbauen
- $eval = sprintf("\$partInstance = %s::create%s();",
- $partClass, $partClass
- );
-
- // Debug-Meldung ausgeben
- if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
- __CLASS__,
- __LINE__,
- htmlentities($eval)
- ));
-
- // ... und ausfuehren
- eval($eval);
+ // Get an instance back from our object factory
+ $partInstance = ObjectFactory::createObjectByName($partClass);
} else {
// Nicht vorhanden, dann Ausnahme werfen!
- throw new ClassNotFoundException($partClass, 0);
+ throw new ClassNotFoundException($partClass, self::EXCEPTION_CLASS_NOT_FOUND);
}
// Das Einbauen versuchen...
$e->getMessage()
));
return false;
- } catch (ExceptionNotChangedException $e) {
- if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Eine Exception wurde nicht geändert. Details: <strong>%s</strong><br />\n",
- __CLASS__,
- __LINE__,
- $e->getMessage()
- ));
- return false;
} catch (ExceptionNotFoundException $e) {
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Eine Exception wurde nicht gefunden. Details: <strong>%s</strong><br />\n",
__CLASS__,
__CLASS__,
__LINE__,
$this->getShipName(),
- $partInstance->getPartDescr()
+ $partInstance->getObjectDescription()
));
// Alles klar!
}
// Getter-Methode fuer Strukturen-Array
- public function getStructuresArray () {
+ public final function getStructuresArray () {
return $this->structures;
}
}
// Setter-Methode fuer Schiffsnamen
- public function setShipName ($shipName) {
+ public final function setShipName ($shipName) {
// Cast the string
$shipName = (string) $shipName;
}
// Getter-Methode fuer Schiffsnamen
- public function getShipName () {
+ public final function getShipName () {
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das <strong>%s</strong> ist auf den Namen <strong>%s</strong> getauft worden.<br />\n",
__CLASS__,
__LINE__,
}
// Setter-Methode fuer Tiefgang
- public function setDraught ($draught) {
+ public final function setDraught ($draught) {
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das <strong>%s</strong> mit dem Namen <strong>%s</strong> hat einen Tiefgang von <strong>%sm</strong>.<br />\n",
__CLASS__,
__LINE__,
}
// Getter-Methode fuer Tiefgang
- public function getDraught() {
+ public final function getDraught() {
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der Tiefgang des Schiffes <strong>%s</strong> wurde angefordert.<br />\n",
__CLASS__,
__LINE__,
}
// Setter-Methode fuer Anzahl Anker
- public function setNumAnchor ($numAnchor) {
+ public final function setNumAnchor ($numAnchor) {
if ((defined('DEBUG_SHIP')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das <strong>%s</strong> mit dem Namen <strong>%s</strong> hat <strong>%s</strong> Anker.<br />\n",
__CLASS__,
__LINE__,