Hallo,
ich habe mir eine kleine MySQL Klasse geschrieben (unten ist ein Teil davon zu sehen) und probiere dabei ein wenig
die PHP5 MagicFunktions aus unter auch __clone. Meine Klasse soll wenn sie geclont wird automatisch eine neue
Verbindung mit den alten Verbindungsdaten zur Datenbank aufbauen (siehe Funktion __clone() ). Nur meine Frage
dazu ist nun inwiefern das bei persisten Verbindungen Sinn macht denn laut Manual:
Demnach würde doch das geclonte Objekt mit der gleichen Verbindungskennung wie das Mutterobjekt arbeiten oder?
ich habe mir eine kleine MySQL Klasse geschrieben (unten ist ein Teil davon zu sehen) und probiere dabei ein wenig
die PHP5 MagicFunktions aus unter auch __clone. Meine Klasse soll wenn sie geclont wird automatisch eine neue
Verbindung mit den alten Verbindungsdaten zur Datenbank aufbauen (siehe Funktion __clone() ). Nur meine Frage
dazu ist nun inwiefern das bei persisten Verbindungen Sinn macht denn laut Manual:
vor dem Verbindungsaufbau wird zunächst versucht eine offene (persistente) Verbindung zum gleichen Host,
mit dem gleichen Benutzernamen und Benutzerkennwort zu finden. Wenn das gelingt, wird die Verbindungskennung
dieser Verbindung zurückgeliefert anstatt eine neue Verbindung aufzubauen.
mit dem gleichen Benutzernamen und Benutzerkennwort zu finden. Wenn das gelingt, wird die Verbindungskennung
dieser Verbindung zurückgeliefert anstatt eine neue Verbindung aufzubauen.
PHP-Code:
<?
/** MySQL Class
*
* @author HStev
* @version 1.1
* @package Database
*/
class MySQL
{
/** conndata
*
* Enthält Connectiondaten
* für Clonezwecke
* @var array
*/
protected $_conndata = NULL;
...
/** connect
*
* verbindet zur Datenbank
* @param string $host
* @param string $user
* @param string $pass
*/
public function connect($host, $user, $pass)
{
if (!isset($this->_persistent))
throw new MySQLException('set the connection method (persistent=true/false)');
if ($this->_conn)
throw new MySQLException('already connected');
switch($this->_persistent)
{
case true:
$this->_conn = @mysql_pconnect ( $host , $user, $pass, $this->flags);
break;
case false:
$this->_conn = @mysql_connect ( $host , $user, $pass, true, $this->flags);
break;
}
if (!$this->_conn)
{
if (!$this->_persistent) @mysql_close($this->_conn);
throw new MySQLConException($this->_conn);
}
$this->_database = NULL;
$this->_conndata = array( 'Host' => $host,
'User' => $user,
'Pass' => $pass
);
}
...
public function __clone()
{
$this->_resource_orig = NULL;
$this->_resource = NULL;
$this->_conn = NULL;
if ($this->_conndata != NULL)
{
if (!is_array($this->_conndata))
throw new MySQLException("no connectiondata in cloned objekt");
$dbase = $this->database;
$this->connect($this->_conndata['Host'], $this->_conndata['User'], $this->_conndata['Pass']);
$this->database = $dbase;
}
}
}
...
Kommentar