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
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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à:
Ceci va "charger" des variables. Par exemple, dans ce fichier j'ai ceci:
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private function translationFile($fichier) { include($this->_dirLangue.'/'.$this->_langue.'/'.$fichier.'.php'); }
Puis dans ma class, ceci affiche le texte:
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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";
grace à la commande magique
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo $langue->msg_mm_1_1;
Ca marche bien, mais je ne suis pas concaincu que c'est propre.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Ma premiere question:
Si je devine bien, ceci
crée un variable. Mais est-elle public, private ou protected?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->msg_mm_1_1 ="My Hobbies";
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
J'ai une préférence pour la methode magique puisqu'elle controle si la variable existe ou pas.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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>'; }
Troisieme question:
Que pensez-vous de mon petite code?
Pourrais-je faire mieux?
Merci pour vos lumières
Partager