2009-01-18 7 views
-1

J'utilise une classe PHP à des fins de connexion. La base de données MySQL que les contrôles de processus de connexion pour l'utilisateur est défini comme ceci:var pour une classe en PHP

class flexibleAccess{ 

    var $dbName = 'mydatabase'; 

Cependant, comme je l'ai installer l'application pour différentes personnes, ce dbName $ a besoin de changements constants. J'ai décidé de faire un fichier de configuration où je garde mes informations de base de données, donc je devrais changer de manière plus facile car cette classe de connexion est "cachée" quelque part. Le problème est que je veux faire quelque chose comme ceci:

class flexibleAccess{ 

     var $dbName = $_SESSION['mydatabase']; 

Et je reçois l'erreur: « Erreur d'analyse: analyser erreur dans chemin /access.class.php en ligne 43 » La ligne 43 est la line avec $ dbName ... Pourquoi ne puis-je pas utiliser ceci pour obtenir dynamiquement mes valeurs de la session? Et comment dois-je l'utiliser?

Merci

Répondre

2

Faites-en constructor (je suppose php5 ici ...)

class flexibleAccess{ 

    private $dbName; 

    function __construct() { 
     $this->dbName = $_SESSION['mydatabase']; 
    } 
} 

Pour PHP4, remplacer __construct avec le nom de la classe à la place.

+0

ce code suppose que votre nom de base de données proviendra toujours de la session. pour moi ressemble à codé en dur. pourquoi pas le passer comme paramètre n le constructeur –

+0

L'OP le voulait de la session, c'est ce que j'ai démontré. –

1

Vous devez assigner cette variable dans le constructeur de la classe comme PHP 4 only allows constant values as initializers:

In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below).

0

Sinon, vous pouvez spécifier où la classe doit lire cette information sur tout en appelant la classe, par exemple:

<?php 
$login = new flexibleAccess(); 
$login->dbName = $_SESSION['mydatabase']; 
?> 

De cette façon, votre classe reste propre et peut accepter le nom de la base de données (et toute autre information pouvant varier) à partir de n'importe quelle source ou méthode que vous préférez. En prime, vous n'avez pas à faire attention à la version de PHP que vous utilisez, cela fonctionnera bien dans les deux cas.

Espérons que cela aide!

-Dave

+0

Je vois que ma réponse a été votée, est-ce que cette méthode n'est pas recommandée?Si oui, j'aimerais savoir pour que je puisse apprendre de cela. Merci! – Dave

+0

Vous ne mettez pas les bases de données dans les sessions, vous les mettez dans les configs comme Gary a dit. – MrHus

+0

..qui n'a rien à voir avec la réponse donnée. J'ai répondu à la question sur la façon de définir ces variables, pas si oui ou non utiliser des sessions pour enregistrer vos informations de base de données était bon ou pas. – Dave

4

Vous ne devriez probablement pas mettre la configuration de base de données dans la session. C'est un peu risqué pour moi.

Je voudrais créer un fichier de configuration avec les informations et l'inclure avec une constante:

dbconfig.php:

constant("DBNAME", 'mydatabase'); 

flexibleaccess.php:

require_once 'dbconfig.php'; 

class flexibleAccess { 
    private $dbname; 

    // set the default database name to the constant DBNAME 
    // but allow override 
    public function __construct ($dbname = DBNAME) 
    { 
    $this->dbname = $dbname; 
    } 
} 

Tous les fichiers qui ont besoin accès à la base de données:

require_once 'flexibleaccess.php'; 

$db = new flexibleaccess(); 

Bien sûr, vous n'avez pas besoin de le définir comme une constante. La clé est que vous mettez la configuration dans un fichier séparé de votre code.

+1

Certainement à droite; mettre cette information dans la session est stupide. – DreamWerx

Questions connexes