Klasse in Klasse Gebruiken
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?
$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?
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...
Gewijzigd op 11/02/2005 20:15:00 door AllRound
$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...
En zoals je mss weet wordt de functie die dezelfde naam heeft als de class gelijk uitgevoerd :P
Code (php)
Voorbeeld
Mitch:
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?
Iemand?
JE moet iets met exstends gebruiken voor een sub class
Ik wil het niet als subclass gebruiken, maar gewoon een object van een andere klasse in die klasse aanmaken...
db.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class db_base {
public $persistency =0;
function db_base($host, $usr, $pass, $db) {
$this->host = $host;
$this->usr = $usr;
$this->pass = $pass;
$this->dbname = $db;
}
//Use persistent connections?
function persistency(){
$this->persistency = 1;
}
}
$file = join("", array("db_", $CONFIG['db'], ".php"));
require($file);
?>
class db_base {
public $persistency =0;
function db_base($host, $usr, $pass, $db) {
$this->host = $host;
$this->usr = $usr;
$this->pass = $pass;
$this->dbname = $db;
}
//Use persistent connections?
function persistency(){
$this->persistency = 1;
}
}
$file = join("", array("db_", $CONFIG['db'], ".php"));
require($file);
?>
db_mysql.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class db extends db_base {
function connect(){
if($this->persistency){
$this->db_connect_id = @mysql_pconnect($this->host, $this->usr, $this->pass);
}else{
$this->db_connect_id = @mysql_connect($this->host, $this->usr, $this->pass);
}
@mysql_select_db($this->dbname, $this->db_connect_id);
return($this->db_connect_id);
}
function query($query){
$this->result = @mysql_query($query);
return($this->result);
}
}
?>
class db extends db_base {
function connect(){
if($this->persistency){
$this->db_connect_id = @mysql_pconnect($this->host, $this->usr, $this->pass);
}else{
$this->db_connect_id = @mysql_connect($this->host, $this->usr, $this->pass);
}
@mysql_select_db($this->dbname, $this->db_connect_id);
return($this->db_connect_id);
}
function query($query){
$this->result = @mysql_query($query);
return($this->result);
}
}
?>
en zo roep je alles aan
include_once (ROOTPATH.'config.inc'.EXT);
include_once (ROOTPATH.'lib/db'.EXT);
$db = new db($CONFIG['db_host'], $CONFIG['db_user'], $CONFIG['db_pass'], $CONFIG['db_db']);
$conn = $db->connect();
Gewijzigd op 13/02/2005 20:18:00 door Thijs -