2011-10-18 6 views
3

J'ai la configuration suivante:variable PHP ne passe pas à fonctionner

class.staff.php

Ceci définit de nombreuses variables, celui dont je travaille est en ce moment thisuser- $> getStaffLang()

class.language.php

(seulement une fonction, pas une classe) Ce fichier exécute une requête SQL sur la base d'une variable que je le passe de header.inc.php aussi bien qu'il devrait tirer l'ID de langue unique des membres du personnel.

La fonction est:

function translate($TRANSLATION){ 

$sql="SELECT $TRANSLATION FROM ".LANGUAGE_TABLE." WHERE LANGUAGE_ID=".$thisuser->getStaffLang; 
$query = mysql_query($sql); 
$translation = mysql_result($query,0); 
print $translation; 
} 

header.inc.php

fichier d'abord, je travaille avec l'aide de cette fonction

entrée de traduction

exemple est:

translate('TEXT_WELCOME_BACK_STAFF'); 

Mon problème est que quand je suis dehors la fonction $ thisuser-> getStaffLang; est peuplé mais à l'intérieur de la fonction il est vide. Je ne veux vraiment pas devoir passer la même variable à la fonction encore et encore car certains fichiers peuvent contenir jusqu'à 20 traductions et cela semble être beaucoup de codage redondant. Quelqu'un peut-il me dire comment, dans le diable, je peux obtenir cette variable pour être reconnu par la fonction sans avoir à le passer à chaque fois lors de l'appel de la fonction? J'espère que ce n'était pas clair comme de la boue. : \

Remarque: Les deux class.language.php (où la fonction est et ne fonctionne pas) et header.inc.php (où la variable fonctionne seule) ont requis class.staff.php. Donc, ils devraient tous deux être en mesure d'utiliser ce code/variable.

Répondre

1

ajouter global $thisuser; au beggining de translate()

+1

Soupir, si simple! Je vous remercie! Je me suis cogné la tête contre le mur pendant les 2 dernières heures. : P –

+0

alors pourquoi quelqu'un -1 moi? :( –

+0

Oui, je ne sais pas.: \ –

0

$thisuser->getStaffLang est probablement pas globale. Vous devez soit le rendre global, en ajoutant global $thisuser à la première ligne de la fonction,

ou mieux, passer cette variable également dans la portée de la fonction. Donc, quelque chose comme ceci:

function translate($TRANSLATION, $stafflang){ 
// function here 
} 

translate('TEXT_WELCOME_BACK_STAFF',$thisuser->getStaffLang); 
+0

Donner Alon le crédit comme il a répondu en premier (mais en quelques secondes) et parce que je ne veux pas utiliser la méthode "passer la variable" que vous avez décrite comme il y a beaucoup d'entrées que je dois faire et je ne veux pas avoir tout ce code quasi-redondant. Je sais (maintenant) que les deux façons dont vous avez parlé fonctionneraient.Merci beaucoup! –

+0

vous ne devriez pas dépendre de la variable étant là en dehors de la fonction.Peut-être que quelque part dans le futur vous changerez le nom de la variable, ou le rendra fonctionnel ou quelque chose, et alors il ne fonctionnera pas soudainement, et vous donnera alors beaucoup de problèmes. Whithin fonctions/classes ont toujours tout local –

+0

btw, il ne s'agit pas d'être le premier, il s'agit de la meilleure réponse –

1

Vous devez marquer $thisuser comme mondiale. Voir ci-dessous:

function translate($TRANSLATION) 
{ 
    global $thisuser;  //<---- MUST MARK global 

    $sql="SELECT $TRANSLATION FROM ".LANGUAGE_TABLE." WHERE LANGUAGE_ID=".$thisuser->getStaffLang; 
    $query = mysql_query($sql); 
    $translation = mysql_result($query,0); 
    print $translation; 
} 
Questions connexes