2010-09-01 4 views
2

J'ai donc cette classe qui comprend des fonctions personnalisées nommées class.php J'ai un autre fichier nommé config.php qui comprendfonction de membre de classe dans la fonction?

require('engine.class.php'); 
$engine = new engine; 

config.php exige également functions.php à courir comme:

require('functions.php'); 

j'ai une fonction functions.php qui utilise le moteur de $, par exemple:

function login($username, $password){ 
    return $engine->mysql_query('SELECT `user_id` WH...', 'array);//this is custom function in class.php 
} 

mais quand je lance la page qui reuir es config.php je reçois une erreur comme:

Fatal error: Call to a member function mysql_query() on a non-object in ../somedir/functions.php on line 3 

Répondre

2

Global variables are indisputably evil. Toute personne qui vous dit de les utiliser n'a pas l'expérience de la portée de traiter w/code qui les utilise. Malheureusement, il y a beaucoup plus de codeurs PHP utilisant des globals que n'importe quelle autre langue, d'après mon expérience, en grande partie à cause de l'ignorance.

Pratiquement chaque classe devrait être auto-cohérente, ce qui signifie que peu importe combien de fois vous le justifiez dans un objet via new. La seule exception est le modèle Singleton, mais les instances du monde réel où les singletons sont souhaitables sont si rare que pratiquement chaque utilisation de ceux-ci est également un défaut de conception non alloué qui couple étroitement le code, qui est également un very bad thing.


met en cache PHP connexions DB, vous pouvez donc avoir dans le même programme d un mysql_connect illimité() et il ne se connecter une fois par chargement de la page (sauf si vous fermez manuellement). Donc, retirer le moteur $ de votre config.php immédiatement et réécrire tout le code à ceci:

function login($username, $password) 
{ 
    $engine = new Engine; 
    //this is custom function in class.php 
    return $engine->mysql_query('SELECT `user_id` WH...', 'array); 
} 

Je heureusement elucidate plus, si vous en avez besoin.

+1

Merci, je suppose que c'est mieux! – tazphoenix

2

Vous aurez besoin de se référer à Variables scope. Comme vous ne pouvez pas accéder à $ engine sans qu'il soit global ou que vous le définissiez/le déclariez (singleton design pattern vient à l'esprit) dans la fonction.

EDIT

Vous pouvez également passer comme paramètre à la fonction (oublié précédemment mentionner).

+0

Ou en passant à la fonction. –

+0

En 12 ans de programmation en PHP, je n'ai jamais rencontré le besoin d'un global, même si je les ai beaucoup utilisés au début. Juste ... ne ... fais pas ça! –

+0

Je n'ai jamais suggéré d'utiliser 'globals', je viens de dire que c'est une méthode disponible pour l'utilisation. L'utilisateur peut lire sur "globals" s'il le veut et décider s'il veut ou non les utiliser, son choix, même si ce n'est pas la meilleure méthode. Ma préférence serait la méthode singleton ou le paramètre, selon l'usage/besoin. –

Questions connexes