Zum Inhalt springen

Objektorientierte DB-Verbindung in PHP


Empfohlene Beiträge

Hoi,

ich habe ein Problem. Wenn ich versuche darauf zuzugreifen kommt ein Fehler. Kann mir jemand sagen an was das liegt?


<?php
class DBConnection
{
private $db['host'] = 'localhost'; // Datenbank Host
private $db['user'] = 'root'; // Datenbank Benutzername
private $db['pass'] = ''; // Datenbank Passwort
private $db['db'] = 'test'; // Datenbankname

public getHost(){
return $db['host'];
}

public getUser(){
return $db['user'];
}

public getPass(){
return $db['pass'];
}

public getDB(){
return $db['db'];
}
}
?>
[/PHP]

Und hiermit versuche ich es abzufrage (Testmäßig)

[PHP]
<?php
require("includes/db.inc.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>New Document</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$db = new DBConnect();
$connect = new mysqli($db->getHost(),$db->getUser(),$db->getPass(),$db->getDB());

if(!$connect){
echo "Es konnte keine Verbindung aufgebaut werden!";
}else{
echo "Alles lief bestens!";
$connect->close();
}
?>
</body>
</html>

Und das ist der Fehler:


Parse error: parse error, unexpected '[', expecting ',' or ';' in /srv/www/htdocs/clehmann/test/includes/db.inc.php on line 4
[/PHP]

Mfg Chris

Link zu diesem Kommentar
Auf anderen Seiten teilen

du versuchst verschiedene Variablen zu definieren die gleich heißen aber andere Feldnamen haben. das geht nicht.

private $db = array(

'host' => ...,

'user' => .....

);

das sollte gehen.

ich würde dir jedoch empfehlen das im Konstruktor zu setzen, ist flexibler

Und wenn du einen schritt weiter gehen möchtest, mach ein Singleton draus. (singleton-pattern in einer suchmaschine deiner Wahl)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Felher liegt in Zeile 4, also hier:


<?php

  class DBConnection

  {

    [b]private $db['host'] = 'localhost';[/b]

Da du private und public nutzt, nutzt du also php 5 (davor gab es das nicht). In php 5 kannst du aber Felder in einer Klasse nicht so initialisieren bei der deklaration.

Definier deine Felder und initialisiere sie im Konstruktor:


<?php
class DBConnection
{
private $db = array();
...
function __construct()
{
$db["host"] = "bla";
...
}
[/php]

Die Deklaration als Array ist sauberer, muss aber AFAIK bei php nicht unbedingt sein (sollte aber auf jeden Fall).

Siehe:

Beispiel 19.2. Einfache Klassendefinition

...

Der Standardwert muss ein konstanter Ausdruck sein, keine (z.B.) variable, Klassenattribut oder Funktionsaufruf.

[/Quote]

Und bei dir ist der Standardwert ja keine Konstante.

Ich hab dazu auch irgenwo mal einen vergleich zu php 4 gelesen, da wurde das expliziter beschrieben. Auch auf dieser Seite, aber finde es nicht mehr im Moment.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt sieht das ganze so aus aber funktioniert nicht da er mir anzeigt das die Felder leer sind. also 'host, 'user', 'pass' und 'db'.


<?php
class DBConnection
{
private $db;

function __construct(){
$db = array(
'host' => 'localhost',
'user' => 'test',
'pass' => 'test',
'db' => 'test'
);
}

public function getHost(){
return $db['host'];
}

public function getUser(){
return $db['user'];
}

public function getPass(){
return $db['pass'];
}

public function getDB(){
return $db['db'];
}
}
?>
[/PHP]

und hier die Index.php (die $connect ist auskommentiert)

[PHP]
<?php
require("includes/db.inc.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>New Document</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$db = new DBConnection();
//$connect = new mysqli($db->getHost(),$db->getUser(),$db->getPass(),$db->getDB());
echo $db->getHost() . ", ". $db->getUser(). ", ". $db->getPass();
?>
</body>
</html>

An was liegt es das die Array Felder leer sind? Da ich das Array im Konstruktor fülle und ich ja eine neue Instanz der Klasse mache sollte er eigentlich den Konstruktor aufrufen was er, wie es scheint, jedoch nicht tut.

Mfg Chris

Link zu diesem Kommentar
Auf anderen Seiten teilen

Beispiel 19.2. Einfache Klassendefinition

<?php

class SimpleClass

{

// Memberdeklaration

public $var = 'ein Vorgabewert';

// Methodendeklaration

public function displayVar() {

echo $this->var;

}

}

?>

OK, hier ist erstmal das mit dem Vorgabewert wieder drin, was man eigentlich so nicht tun sollte, AFAIK ;)

Aber was ich meine ist das $this, also bei dir:



public function getHost()
{
return $this->db['host'];
}

[/php]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...