Bonjour à tous,
J'ai un doute et je souhaiterai avoir votre conseil avant de faire tout faux.
J'ai récupéré un class et je l'ai adaptée pour l'utiliser afin d'afficher du texte selon la langue.
Voici le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
class Langues {
// Langue par le code ISO 639 (défaut : français)
private $_langue = 'fr';
// Dossier contenant les langues
private $_dirLangue = '';
/*
Constructeur
Récupère la langue via le navigateur, sinon charge celle par défaut ou si une langue est spécifiée, on charge celle ci. Permet aussi de spécifier le dossier ou ce trouvent les langues
@access public
@param $langue, $dirLangue, $fichier
@return void
*/
public function __construct($dirLangue, $fichier, $langue = false) {
if(is_dir($dirLangue)) {
$this->_dirLangue = $dirLangue;
}
else {
$this->_dirLangue = 'langues';
}
if($langue) {
$this->_langue = strtolower($langue);
}
else {
if($lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2))) {
# $this->_langue = $lang;
$this->_langue = $_SESSION['language'];
}
else {
$this->_langue = 'fr';
}
}
if(file_exists($this->_dirLangue.'/'.$this->_langue.'/'.$fichier.'.php')) {
// Chargement du fichier langue
$this->translationFile($fichier);
}
else {
die('Fichier de traduction ('.$this->_dirLangue.'/'.$this->_langue.'/'.$fichier.'.php) est innexistant ! Merci de vérifier que celui ci existe.');
}
}
/*
Charge le fichier XML
@access private
@param $fichier
@return void
*/
private function translationFile($fichier) {
include($this->_dirLangue.'/'.$this->_langue.'/'.$fichier.'.php');
}
/*
Charge le message à afficher
@access public
@param $texte
@return $texte
*/
#private function text($texte) {
# return $this->$texte;
#}
public function __get($texte){
return $this->$texte;
#text($texte);
}
} |
Ma question commence là:
1 2 3 4
|
private function translationFile($fichier) {
include($this->_dirLangue.'/'.$this->_langue.'/'.$fichier.'.php');
} |
Ceci va "charger" des variables. Par exemple, dans ce fichier j'ai ceci:
1 2 3 4 5
|
$this->msg_mm_1_1 ="My Hobbies";
$this->msg_mm_1_2 = "Présentation";
$this->msg_mm_1_3 = "Communication";
$this->msg_mm_1_4 = "Contact"; |
Puis dans ma class, ceci affiche le texte:
1 2
|
echo $langue->msg_mm_1_1; |
grace à la commande magique
1 2 3 4 5 6 7
|
public function __get($texte){
if(property_exists(__CLASS__, $name)) $this->$texte = $value;
else echo '<p>Code error : <b><em>"'.$texte.'"</em></b> is not an existing property in the class : '.__CLASS__.'</p>';
#return $this->$texte;
#text($texte);
} |
Ca marche bien, mais je ne suis pas concaincu que c'est propre.
Ma premiere question:
Si je devine bien, ceci
$this->msg_mm_1_1 ="My Hobbies";
crée un variable. Mais est-elle public, private ou protected?
Comment faire pour la rendre protected ou private?
Deuxieme question:
Je ne sais pas ce qu'il y a de mieux entre ces deux solutions
1 2 3 4 5 6 7 8 9 10 11
|
public function text($texte) {
return $this->$texte;
}
OU
public function __get($texte){
if(property_exists(__CLASS__, $texte)) $this->$texte = $value;
else echo '<p>Code error : <b><em>"'.$texte.'"</em></b> is not an existing property in the class : '.__CLASS__.'</p>';
} |
J'ai une préférence pour la methode magique puisqu'elle controle si la variable existe ou pas.
Troisieme question:
Que pensez-vous de mon petite code?
Pourrais-je faire mieux?
Merci pour vos lumières
Partager