OO-Verständigungsfrage

Malaxo

Erfahrenes Mitglied
Ich bin dabei mir OO in PHP ein wenig an zueignen.

Dabei will ich eine Klasse erstellen für MySQL. Hab auch eine Seite gefunden die mir das erklärt, jetzt versuch ich es alleine zu basteln und habe folgendes auf der Seite gefunden:

PHP:
class mysql {

var $host = "";
var $user = "";
var $pass = "";
var $database = "";
var $persistency = false;
var $serverid = "";
var $error = array();

function mysql($host, $user, $pass, $database, $persistency = false) {

$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->database = $database;
$this->persistency = $persistency;

if($this->persistency) {

$this->serverid = @mysql_pconnect($this->host, $this->user, $this->pass);

}
else {

$this->serverid = @mysql_connect($this->host, $this->user, $this->pass);

}

Jetzt meine Frage:
Ist hier nicht IMMER $this->persistency ?
Man setzt doch in der Funktion persistency auf false und prüft dann in der If-Anweisung ob dies existiert. Oder was passiert den hier genau?

http://www.it-academy.cc/article/1353/Objektorientiertes+Programmieren+in+PHP.html

Ich versuch es ohne diese Variable persistency. Da ich diese für unnötig finde. Jedoch braucht man dieses aber, daher meine frage. Was es sich damit genau auf sich hat.
 
"$this->persistency" fragt ab, ob eine persistente Verbindung zum MySQL Server aufgebaut werden soll. Da diese Variable mit "false" belegt ist, wird in deinem Beispiel nur eine normale Verbindung zum MySQL Server aufgebaut.
Wenn du diese Sache mit persistenter Verbindung ganz weglassen willst, könnte es dann wie folgt aussehn.

PHP:
class mysql { 

var $host = ""; 
var $user = ""; 
var $pass = ""; 
var $database = ""; 
var $serverid = ""; 
var $error = array(); 

function mysql($host, $user, $pass, $database) { 

$this->host = $host; 
$this->user = $user; 
$this->pass = $pass; 
$this->database = $database; 

$this->serverid = @mysql_connect($this->host, $this->user, $this->pass); 

}
 
Um den ganze Klasse etwas mehr "funktion" zu verleihen empfehlen sich folgende Beispiele:

PHP:
	function db_choose($dbname) // wählt die datenbank
	{
		@mysql_select_db($dbname) or die ("Datenbank konnte nicht ausgewählt werden!");
	}	

    function mysqlclose()
    {
		if(is_resource($this->connection))
		{
        	$this->connection = mysql_close();
    	}
	} 
	
    function query($querystring)
	{
        if ($this->connection == false) $this->connect();
        if ($this->connection == false) return;
		
        $res = @mysql_query($querystring, $this->connection) or die("{query} Database Error : ".mysql_errno()." : ".mysql_error());
    
	return $res;
    }

Eine solche Klasse macht aber in meinen Augen nur bei wirklich großen Projekten Sinn, oder wie seht ihr das?
 
Ja klar. Das von Malaxol war sicherlich nur ein Teil seiner Klasse oder der Anfang. Im Prinzip kann man die Klasse um jede Funktion erweitern, die auch MySQL bietet. Hat aber wirklich nur bei großen Projekten Sinn. Für kleinere Skripte sehe ich es als sinnfrei an, die Datenbankfunktionen auszugliedern. Bei einem CMS wo ggf. mehrere Klasse gegeben sind sieht man eher den Erfolg. Sollte sich da was an der Datanbank ändern oder ähnliches wird nur eine Datei zum ändern benötigt und nicht mehrere.
Aber um genau sagen zu können wo es sich lohnt gewissen Code zu extrahieren und wo nicht, muss man sich mehr mit dem Thema OOP bechäftigen.
 
Jap das ist nur zum Üben gedacht.

Ich werde eine zweite Klasse erstellen mit den gängigsten MySQL befehlen (Update, Select und Delete)

So habe ich eine Klasse, die die Verbindung herstellt und eine zweite klasse die mir die gebräuchlichsten befehle abnimmt.

Dies kann man dann schnell auf verschiedene Server anpassen.

Thx so weit;)
 
Falsch! für was ne zweite Klasse mit den Methoden? Du wirst die MySQL Befehle nie ohne ne Verbindung aufrufen! Ne zweite Klasse, sowie du es vorhast würde also für nix tauglich sein.
Darf ich mal kurz Fragen was du von der OOP kennst?
 
:) ja ich hab das falsch geschrieben:) ich meinte einfach weitere Funktionen. :) mein Fehler:) natürlich meinte ich nicht eine extra Klasse:)

OO hab ich erst mit C# programmiert für SharpointWebparts;) aber keine grossen;)

thx
 
Zurück