Klasse in Klasse Gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

AllRound

AllRound

08/02/2005 20:46:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

15/01/2025 06:36:07
 
Arend a

Arend a

08/02/2005 21:31:00
Quote Anchor link
Misschien zit er gewoon binnen in je klasse een fout. Het zou geen probleem moeten zijn. Plaats anders je class voor connecten eens.
 
AllRound

AllRound

08/02/2005 22:20:00
Quote Anchor link
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?
 
Winston Smith

Winston Smith

09/02/2005 00:27:00
Quote Anchor link
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...
 
Arend a

Arend a

09/02/2005 21:30:00
Quote Anchor link
Meestal zijn parse errors ernstigere fouten dan fouten in de scope. Plaats de error eens, en de overeenkomstige regels uit de class?
 
AllRound

AllRound

11/02/2005 19:51:00
Quote Anchor link
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...
Gewijzigd op 11/02/2005 20:15:00 door AllRound
 
Winston Smith

Winston Smith

11/02/2005 22:24:00
Quote Anchor link
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...
 
Mitch X

Mitch X

11/02/2005 23:08:00
Quote Anchor link
Weet PHP wel ^^
En zoals je mss weet wordt de functie die dezelfde naam heeft als de class gelijk uitgevoerd :P
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
class display
{
   function
display( $text )
   {

      echo $text;
   }
}

$disp = new display( 'Hoi!' );
?>


Voorbeeld
 
Winston Smith

Winston Smith

12/02/2005 04:47:00
Quote Anchor link
Mitch:
Weet PHP wel ^^


Ik heb niks gezegd :$
Maar geeft toe: het is niet netjes om het zo te doen... :)
 
AllRound

AllRound

12/02/2005 11:53:00
Quote Anchor link
Maar ziet iemand waarom deze code mis gaat?
 
AllRound

AllRound

13/02/2005 16:50:00
Quote Anchor link
Iemand?
 

13/02/2005 16:56:00
Quote Anchor link
JE moet iets met exstends gebruiken voor een sub class
 
AllRound

AllRound

13/02/2005 20:06:00
Quote Anchor link
Ik wil het niet als subclass gebruiken, maar gewoon een object van een andere klasse in die klasse aanmaken...
 
Thijs -

Thijs -

13/02/2005 20:17:00
Quote Anchor link
zo zou ik het doen.... (wel iets andere benamingen dit is mijn db class namelijk :))

db.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);

?>


db_mysql.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }
}

?>


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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.