Comment accéder à la constante définie en dehors de la classe?
J'ai défini quelques constantes par exemple:
define('DB_HOSTNAME', 'localhost', true);
define('DB_USERNAME', 'root', true);
define('DB_PASSWORD', 'root', true);
define('DB_DATABASE', 'authtest', true);
maintenant quand j'essaye de le faire:
class Auth{
function AuthClass() {
$this->db_link = mysql_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD)
or die(mysql_error());
}
}
J'obtiens une erreur. Pourquoi est-ce et que dois-je faire?
Le voir, j'ai essayé en utilisant (par exemple) global DB_HOSTNAME
mais cela échoue avec une erreur.
L'erreur que je reçois est:
Unknown MySQL server host 'DB_HOSTNAME' (1)
Si vous obtenez cette erreur, la définition n'est certainement pas définie lorsque la méthode est appelée.
OriginalL'auteur Ash | 2010-06-11
Vous devez vous connecter pour publier un commentaire.
Lorsque le script s'exécute, à la fois la constante et les définitions de classe devraient être inclus.
par exemple
constantes.php.inc
Auth.php.inc
script.php
Les constantes ne sont pas des variables, et ils sont en effet reconnu à l'intérieur de n'importe quelle fonction/méthode qui est exécutée après ils sont définis. C'est une réponse valable et peut en effet répondre à la question.
la réponse ci-dessus est le problème que j'ai
Ward voir ici codepad.viper-7.com/WcDT6R Comme vous pouvez le voir, vous pouvez accéder définie définir à l'intérieur d'une classe.
Vous avez raison et je suis humilié. Il doit y avoir d'autres erreurs dans mon code.
OriginalL'auteur Artefacto
Il devrait fonctionner aussi longtemps que vous avez défini les constantes avant
AuthClass()
s'exécute. Si elles ne sont pas dans le même fichier que votreAuth
de la classe, vous en aurez d'abord besoin de les inclure dans le fichierAuth
réside en sorte qu'il puisse les voir:Puis il devrait fonctionner. Les constantes sont déjà mondiaux, il n'est pas nécessaire d'utiliser le
global
mot-clé.OriginalL'auteur alexantd
Il semble que votre constantes ne sont pas définis avant d'instancier la classe
Auth
. Lorsque vous utilisez une constante indéfinie de cette façon, PHP émet un avertissement et la convertir en une chaîne de caractères. Si le problème est en effet que votre constantes ne sont pas définies, votre code sera effectivement être interprété comme:Compte tenu de l'erreur que vous obtenez (Unknown MySQL server host 'DB_HOSTNAME'), je suppose que c'est ce qui se passe.
Comme d'autres réponses de l'état, assurez-vous de définir les constantes avant de tenter de l'appeler
Auth::AuthClass
. Si la classe et la DB_* les constantes sont définies dans des fichiers différents, assurez-vous que les deux fichiers sont comprises avant de tenter de les instancier/utilisation de la classeAuth
.En aparté, défini constantes sont pas variables. Vous ne pouvez pas utiliser
global CONSTANT_NAME;
de cette façon, et vous n'avez pas besoin d' - toutes les constantes sont toujours globales, et disponible partout après le point elles sont définies. Un simple test le prouve:OriginalL'auteur meagar