Ist das OO gehalten?

Malaxo

Erfahrenes Mitglied
Ich hab mal für den Select Befehl von MySQL eine Funktion geschrieben bzw. meine Klasse erweitert. Die bestehende Klasse habe ich mit Hilfe eines Tutorials gemacht und den Select ohne Tutorial erweitert (zum lernen).

Es funktioniert, jetzt meine frage ist das nun gutes OO fürs erste?

Funktionsaufruf:
PHP:
...
// Funktion select_data aufrufen und Werte übergeben
	$sql->select_data("quelle");
	$sql_query = $sql->query["select_data_all"];
	$result = mysql_query($sql_query);
	while($row = mysql_fetch_assoc($result)) {
		echo $row['id_quelle']." - ".$row['quelle']." - ".$row['link_quelle']."<br />";
	}
...

Funktion in der Classe:
PHP:
...
/****** Funktion für Selectieren von Datensätzen ******/
		function select_data($table){
			if($table == ""){
				$this->error["error"] = true;
				$this->error["error"] = "Select befehl ist nicht vollständig, keine Tabelle gewählt.";
return false;
			}
			else{
				$this->query["select_data_all"] = "SELECT * FROM $table";
				return true;
			}
		}
...
 
Meiner Meinung nach ist es kein gutes OOP wenn man direkt auf Klassenvariablen, bei Dir also das Array $sql->query, zugreift.

Was macht die Klasse eigentlich genau? So wie ich es sehe schreibt sie Dir lediglich Queries, richtig?
 
Moin moin ;)
Im Prinzip ist es net so das Gelbe vom Ei. Hätte das anders aufgebaut. Der Aufbau ist aber jedem Programmierer selbst überlassen.
Ich würde nicht extra nur für den "select"-Befehl ne Methode schreiben. Das sprengt irgendwann deine Klasse.
PHP:
function query($sql){
if($sql=""){
 $this->error["error"] = true;
 $this->error["error"] = "Select befehl ist nicht vollständig!"
}else{
 mysql_query($sql);
}
}
...
$sql->query("SELECT * FROM quelle");

bin mir nur grad nicht sicher ob vor das "mysql_query" noch nen return muss.
Wenn du deine Methode so aufbaust, kommst du nicht auf unendlich viele Methoden, die dann auch irgendwann die Klasse unübersichtlich machen, sondern beschränkst dich auf das Wichtigste.
Verstehst du was ich mein?

Noch eine wichte Sache ist bei der OOP das man von aussen nicht direkt auf Klassenvariablen zugreifen darf! Das darf ausschließlich über Methoden funktionieren
 
Ja momentan schreibt diese mir einfach ein Query mit dem Select Befehl über alle Datensätze.

Müsste ich es so anpassen, dass dieser Teil:

PHP:
$sql_query = $sql->query["select_data_all"];
    $result = mysql_query($sql_query);
    while($row = mysql_fetch_assoc($result)) {
        echo $row['id_quelle']." - ".$row['quelle']." - ".$row['link_quelle']."<br />";
    }

Auch in der Klasse drin ist, wäre das besser?

btw: es ist wirklich nur schlicht gehalten ein Select Befehl über alles mehr nicht:) bzw. noch nicht.
 
@SnEaKy
achso:) ich verstehe:) in deiner Variante hast du einfach ALLE Querys in der Funktion drin so muss beim Aufruf nur das entsprechende Query angegeben werden.

Natürlich eine viel bessere Methode als meine.

Ich werde mal anpassen:D und weiter probieren.
 
Auf Bezug zu meinem Beispiel von eben:
PHP:
while($row = mysql_fetch_assoc($sql->query("SELECT * FROM quelle"))) { 
 echo $row['id_quelle']." - ".$row['quelle']." - ".$row['link_quelle']."<br />"; 
}

Die Zeile:
PHP:
 echo $row['id_quelle']." - ".$row['quelle']." - ".$row['link_quelle']."<br />";
mit in der Klasse zu schreiben, würde ich verzichten. Das ist ne Ausgabe, die felxibel sein sollte und sowas schreibt man nicht in die Klasse...
 
Irgend wie geht das nicht so ganz:)

PHP:
...
/****** Funktion für Selectieren von Datensätzen ******/
		function query($query_input){
			$this->query_input = $query_input; // Von der Klasse MySQL die Variable "query"
			if($query_input == ""){
				$this->error["error"] = true;
				$this->error["error"] = "Select befehl ist nicht vollständig!";
				return false;
			}
			else{
				mysql_query($query_input);
			}
		}
...

PHP:
...
// Funktion select_data aufrufen und Werte übergeben
	while($row = mysql_fetch_assoc($sql->query("SELECT * FROM quelle"))) { 
		echo $row['id_quelle']." - ".$row['quelle']." - ".$row['link_quelle']."<br />"; 
	} 
...

Bekomme die Meldung: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in

Wenn ich nun ein Retrun vor das mysql_query($query_input); setzte bekomme ich unendlich viele Datensätze (Endlosschlaufe).

Wo ist da noch was falsch?

Zusatzfrage:
Ich definiere ganz am Anfang
PHP:
var $query_input = "";

in der Funktion dann:
PHP:
$this->query_input = $query_input; // Von der Klasse MySQL die Variable "query"

Jedoch übergebe ich den Wert doch in die Funktion. Muss ich diese 2 Zeile überhaupt noch benützen?
 
@Malaxo: IMO hast du das return in der query-Funktion vergessen ...

Code:
else
      return mysql_query($query_input);
 
hab doch geschrieben:

Wenn ich nun ein Retrun vor das mysql_query($query_input); setzte bekomme ich unendlich viele Datensätze (Endlosschlaufe).

aber Thx
 
Zurück