Chris: Komplettes Projekt in OOP v2

Beitrag lesen

Hallo.

Ja, aber nun hast du 50 Beiträge lang zumindest Wissen/Erfahrung gesammelt. :-) Fehler und Irrwege sind ganz natürlich im Lernprozess. Man muss ja auch erfahren, warum man bestimmte Wege besser nicht geht.

Ja da hast du Recht..

Das "Beste" gibt es nicht. Aufwand und Nutzen ist immer gegeneinander abzuwägen. Nutzt es etwas, eine Instanz zu haben, wenn die Methoden alle unabhängig voneinander arbeiten? Ist es weniger aufwendig, diese Methoden sttisch aufzurufen? Wenn ich mich recht erinnere schrieb ich schon im ersten Faden, dass eine Klasse mit reinweg statischen öffentlichen Methoden eine Alternative ist.

Ja richtig und als dann alle wie wild mit Singleton Pattern um sich warfen hatte ich mich dafür entschieden.

»» So das halt wirklich die Datenbank verbindung _nur_ bei einem Query kurzzeitig aufgebaut wird.
»» Wie baue ich Sie danach wieder ab?
»» mit $_Connection->close() ?

Ich würde sie einfach stehen lassen. Ein Abbauen bedeutet ein erneutes Aufbauen-Müssen bei der nächsten Query im selben Script. Die Verbindung allein frisst kaum Brot. Sie belegt nur einen Platz der max connections. Wenn du eine hochbelastete Anwendung mit mehr als 100 gleichzeitig laufenden Scripts erstellst oder sie sich so entwickelt, wirst du noch ganz andere Optimierungen finden müssen.

Aber ich speicher sie doch lokal für den _einen_ Query ab, beim nächsten Query holt er sich doch eh eine neue Verbindung aufgrund _getConnection().
Oder sollte ich einfach überprüfen - ist eine DB-Verbindung vorhanden? wenn nicht, erstelle eine und speicher sie Klassenglobal als private static $db_connection und beim nächsten mal nehme die alte abgespeicherte Verbindung?

Hier meine aktuelle Klasse:

  
class db{  
  
	# Instanz - Singleton Pattern  
	private static $_instance;  
	  
	# Verbindungsdaten  
	private static $_db_host;  
	private static $_db_user;  
	private static $_db_pw;  
	private static $_db_name;  
	  
	private static $_count_array;  
	private static $_rwu_sentence;  
	  
	public static $query;  
	public static $result;  
	  
	const select = 1;  
	const update = 2;  
	const delete = 3;  
	const insert = 4;  
	  
	  
	  
	  
	# Konstruktor - private - kann nicht aufgerufen werden  
	private function __construct(){}  
	  
	# Datenbankwerte setzen  
	public static function db_set_vars($host,$name,$pw,$dbname){  
		self::$_db_host=$host;  
		self::$_db_user=$name;  
		self::$_db_pw=$pw;  
		self::$_db_name=$dbname;	  
	}  
	  
	  
	# Zur Datenbank verbinden  
	private static function db_connect(){  
       $_db_connection = new mysqli(self::$_db_host, self::$_db_user, self::$_db_pw, self::$_db_name);  
	   if (mysqli_connect_errno()) {  
   			printf("Connect failed: %s\n", mysqli_connect_error());  
    		exit();  
	   } else {  
	   		return true;  
	   }  
	  
	   return $_db_connection;  
    }  
	  
	######################################################################################################  
	################# db_make_rwu_sentence  
	######################################################################################################  
	  
	// Ein-/Auslesewerte aneinanderreihen  
	/*  
	3 Typen:  
	Typ 1: foo,bar  
	Typ 2: 'foo','bar'  
	Typ 3: foo='bar',foo='bar',  
	Typ 4: ?,?,? - MySQLi Platzhalter für prepared Statements  
	*/  
	private static function db_make_rwu_sentence($what_rwu,$what_insert,$rwu){  
	  
		$x=0; // Zähler auf NULL(0) setzen  
		  
		self::$_rwu_sentence=''; // Zurücksetzen des Ausdrucks  
		  
		foreach($what_rwu as $what){  
			  
				if($rwu==1||$rwu==2){  		// Typ 1 oder 2  
					  
					self::$_rwu_sentence .= ($rwu==1) ? $what : "'".$what."'";  
					  
				} elseif($rwu==3) { 		// Typ 3  
					  
					self::$_rwu_sentence .= $what."='".mysqli_real_escape_string($what_insert[$x])."'";  
				  
				} elseif($rwu==4) { 		// Typ 4  
  
					self::$_rwu_sentence .= "?";  
				  
				}  
				  
				self::$_rwu_sentence .= ($x < self::$_count_array - 1) ? "," : "";  
				  
				++$x; // hochzählen  
		}  
		  
		return self::$_rwu_sentence;  
	}  
	  
	######################################################################################################  
	################# db_create_normal_query  
	######################################################################################################  
	// Erstellt einen Query  
	/*  
	$what_array -> Spaltennamen  
	$what_insert -> Was reingeschrieben wird  
	$from_table -> welche Tabelle angesprochen wird  
	$when -> BEDINGUNG! Wann macht der Querie etwas? Wo? -> $WHEN....  
	$whatkind -> Was für ein RUDI Query ist es? (SELECT(3), UPDATE(2), DELETE(4), INSERT(1))  
	  
	  
	*/  
	public static function db_create_normal_query($what_array,$what_insert, $from_table, $when, $whatkind){  
  
		// RUDI-Queries  
  
		# Wieviele Werte sind ein-/auszulesen  
		self::$_count_array=count($what_array);  
		  
		      if ($whatkind==self::select) { 	// SELECT ((R)ead)  
			  
				self::$query="SELECT ".self::db_make_rwu_sentence($what_array,'',1)." FROM ".$from_table." WHERE ".$when;  
					  
		} elseif ($whatkind==self::update) {	// UPDATE ((U)pdate)  
		  
				tools::check_array_numbers($what_array,$what_insert);  
				self::$query="UPDATE ".$from_table." SET ";  
				self::$query.=self::db_make_rwu_sentence($what_array,$what_insert,3);  
				self::$query.=" WHERE ".$when;  
		  
		} elseif ($whatkind==self::delete) {	// DELETE ((D)elete)  
				  
				self::$query="DELETE FROM ".$from_table." WHERE ".$when;  
				  
		} elseif ($whatkind==self::insert) {	// INSERT ((I)nsert)  
				  
				if(!tools::check_array_numbers($what_array,$what_insert)) self::db_errors("Die Arrays sind nicht gleichlang!");  
				  
				self::$query="INSERT INTO ".$from_table." (".self::db_make_rwu_sentence($what_array,'',1);  
				self::$query.=") VALUES (".self::db_make_rwu_sentence($what_insert,'',2).")";  
		  
		} else {					// Kein Typ -> Error  
		  
				self::db_errors("Es wurde kein Typ ausgewählt");  
				  
		}  
		  
		self::db_query(self::$query);  
	  
	}  
	  
	/**  
	 * Query abarbeiten  
	 *  
	 * @param string $sql  ein SQL-Statement  
	 * @param mixed $asObject  false: Fetchen als Array  
	 *                         true: Fetchen als Objekt  
	 *                         string: Name der zu instantiierenden Klasse  
	 * @param array $objectParams  optionale Parameter @see mysqli_result::fetch_object()  
	 * @return array  Ergebnismenge als Array mit Arrays oder Objekten  
	 */  
	# Query ausführen  
	public static function db_query($sql, $asObject = false, $objectParams = null) {  
	  $result = array();  
	  
	  $mysqli = self::db_connect();  
	  # $mysqli = $this->_getConnection(); // das ist eine private Methode, die mit ein mysqli-Objekt mit aktiver Verbindung gibt.  
	  
	  $mysqliResult = $mysqli->query($sql, MYSQLI_USE_RESULT);  
	  if (!$mysqliResult)  
		throw new Exception(...);  
	  
	  if ($mysqliResult instanceof mysqli_result) {  
		try {  
	  
		  if ($asObject) { // true oder string  
			if (is_string($asObject)) {  
			  if (!class_exists($asObject))  
				throw new Exception('class ' . $asObject . ' does not exist.');  
			} else { // kein Klassenname übergeben, Standard-Klasse verwenden lassen  
			  $asObject = null;  
			  $objectParams = null;  
			}  
	  
			while ($row = $mysqliResult->fetch_object($asObject, $objectParams))  
			  $result[] = $row;  
	  
		  } else  
			while ($row = $mysqliResult->fetch_assoc())  
			  $result[] = $row;  
	  
		} finally {  
		  // wird unbedingt benötigt, wegen MYSQLI_USE_RESULT @see mysqli::query()  
		  $mysqliResult->free();  
		}  
	  }  
	  
	  return $result;  
	}  
	  
	# Clone - unterbinden  
	public function __clone() {  
        trigger_error('Clone is not allowed.', E_USER_ERROR);  
    }  
}  
  

Bei deinem Skript kommen allerdings zwei Fehler aufgrund:

throw new Exception(...);

Was kommt statt "..." hin?
Und er erwartet "catch": Parse error: parse error, expecting `T_CATCH' in

Sprich hier : } finally {

Wäre nett wenn du die zwei Fehler und sonstige die du in der Funktion siehst noch beheben könntest :-[

Mit try, exceptions usw muss ich mich eh noch auseinandersetzen, werde ich in der zwischenzeit mal tun.

Danke dir,

lg, Chris

0 77

Komplettes Projekt in OOP v2

Chris
  • php
  1. 0
    Patrick Figel
  2. 0
    Sympathisant
    1. 0
      Chris
      1. 0
        Sympathisant
        1. 0
          Sven Rautenberg
          1. 0
            Sympathisant
      2. 1
        Sven Rautenberg
        1. 0
          dedlfix
      3. 0
        CHris
  3. 0
    Tom
    1. 0
      Chris
      1. 0
        Tom
      2. 0
        Sympathisant
        1. 0
          Tom
          1. 0
            Sven Rautenberg
            1. 0
              Tom
              1. 0
                Sympathisant
                1. 0
                  Tom
                  1. 0
                    Tom
                    1. 0
                      Sympathisant
                      1. 0
                        Tom
                        1. 0
                          dedlfix
                    2. 0
                      dedlfix
                  2. 0
                    Sympathisant
                    1. 0
                      Tom
                      1. 0
                        Sympathisant
                2. 0
                  Sven Rautenberg
                  1. 0
                    Tom
                    1. 0
                      dedlfix
                3. 0
                  dedlfix
                  1. 0
                    Sympathisant
                    1. 0
                      dedlfix
                      1. 0
                        Sympathisant
              2. 0
                dedlfix
                1. 0
                  Tom
          2. 0
            Sympathisant
        2. 0
          dedlfix
    2. 0
      dedlfix
      1. 0
        Tom
        1. 0
          dedlfix
          1. 0
            Tom
            1. 0
              dedlfix
              1. 0
                Tom
  4. 0

    PDF-Doku für OOP mit PHP5

    Tom
    1. 0
      dedlfix
      1. 0
        Tom
        1. 0
          dedlfix
  5. 0

    Und noch ein eBook für PHP OOP

    Tom
  6. 4
    dedlfix
    1. 0
      Tom
      1. 0
        dedlfix
  7. 0
    Chris
    1. 0
      dedlfix
      1. 0
        Chris
        1. 0
          Tom
          1. 0
            Chris
            1. 0
              Sympathisant
              1. 0
                Tom
        2. 0
          dedlfix
      2. 0
        Chris
        1. 0
          dedlfix
          1. 0
            Chris
            1. 0
              dedlfix
              1. 0
                Chris
                1. 1
                  dedlfix
                  1. 0
                    Chris
                    1. 0
                      dedlfix
                      1. 0
                        Chris
                        1. 0
                          dedlfix
                          1. 0
                            Chris
                            1. 0
                              Tom
                              1. 0
                                dedlfix
                            2. 0
                              dedlfix
                              1. 0
                                Chris
                                1. 0
                                  dedlfix
                                  1. 0
                                    Chris