Ik heb een database klasse gemaakt waarmee op basis van config variabelen een database connectie wordt gemaakt met het juiste database type.

De database klasse heeft een connect functie die kijkt in een config variabele welk type database er wordt gebruikt. Vervolgens wordt er op basis hiervan een object aangemaakt van het juiste database-type-klasse bijvoorbeeld de klasse mysql.

Het probleem is dat dit niet lijkt te werken, als ik de volgende code uitvoer:
include_once('database/class.database.php');
$database = new database();
$database->connect();

Dan krijg ik een parse error als ik een mysql_query probeer uit te voeren. Als ik echter direct de mysql klasse aanroep (dus hetzelfde doe wat normaal in die connect functie gebeurd), waar in de constructor de connectie met de database wordt gemaakt, dan werkt het opeens wel...

Het lijkt er dus op dat het aanmaken van een object binnen een klasse niet goed werkt. Kan iemand me hier iets meer over vertellen?

Misschien zit er gewoon binnen in je klasse een fout. Het zou geen probleem moeten zijn. Plaats anders je class voor connecten eens.
Kan het niet aan de scope liggen van de connectie die in de mysql klasse wordt aangeroepen. Als er in de database klasse een object van mysql wordt aangemaakt en vervolgens ergens anders een object van database klasse, dat die connectie daar niet meer geldig is of zo?
include_once('database/class.database.php');
$database = new database();
$database->connect();

Maak daarvan:

include_once('database/class.database.php');
$database = new database;
$database->connect();

Misschien dat dat je probleem oplost...
Meestal zijn parse errors ernstigere fouten dan fouten in de scope. Plaats de error eens, en de overeenkomstige regels uit de class?
Ok hier de code waar het om gaat:

Allereerst de code uit de pagina waarin de database connectie moet worden gemaakt:

include_once('database/class.database.php');
$database = new database();
$database->connect();

Vervolgens de database klasse:

class database
{
function connect()
{
include_once('configuration/class.configuration.php');
$configuration = new configuration('database');
switch($configuration->configuration[type])
{
case "mysql": include_once('database/class.mysql.php');
$mysql = new mysql($configuration->$configuration[host],
$configuration->$configuration[database],
$configuration->$configuration[user],
$configuration->$configuration[password]);

break;
}
}
}

En tenslotte de mysql klasse:

class mysql
{
private $host;
private $database;
private $user;
private $password;

function mysql($host, $database, $user, $password)
$mysql = mysql_connect($host, $user, $password);
mysql_select_db($database, $mysql);
}
}


Het is php5 code... Het direct gebruiken van de mysql klasse werkt wel...
include_once('database/class.database.php');
$database = new database();
$database->connect();


...lees mijn eerdere post: verander
$database = new database();
in:
$database = new database;

Nu weet php niet of het een functie of klasse is...
Weet PHP wel ^^
En zoals je mss weet wordt de functie die dezelfde naam heeft als de class gelijk uitgevoerd :P
<?php
class display
{
function display( $text )
{
echo $text;
}
}
$disp = new display( 'Hoi!' );
?>

Voorbeeld
Mitch schreef op 11.02.2005 23:08
Weet PHP wel ^^


Ik heb niks gezegd :$
Maar geeft toe: het is niet netjes om het zo te doen... :)
Maar ziet iemand waarom deze code mis gaat?

Reageren