[OOP] talen systeem
language.class.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Language
{
public function setLanguage($language = NULL){
// hier staat eerst allerlei code om te bepalen welke taal gekozen is
// deze wordt toegekent aan $language
// vervolgens wordt het juiste bestand geladen
require("includes/languages/" . $language . ".lang.php");
}
public function getLangText($lang_name){
global $$lang_name; // text var is set global
return $$lang_name; // echo text to page
}
}
?>
class Language
{
public function setLanguage($language = NULL){
// hier staat eerst allerlei code om te bepalen welke taal gekozen is
// deze wordt toegekent aan $language
// vervolgens wordt het juiste bestand geladen
require("includes/languages/" . $language . ".lang.php");
}
public function getLangText($lang_name){
global $$lang_name; // text var is set global
return $$lang_name; // echo text to page
}
}
?>
nl.lang.php:
index.php:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$language = new Language();
$language->setLanguage( $_POST['language'] );
echo $language->getLangText('hello_world');
?>
$language = new Language();
$language->setLanguage( $_POST['language'] );
echo $language->getLangText('hello_world');
?>
Wat gaat er fout. Ik heb dit script gerecycled van een wat oudere website die ik ooit gemaakt heb, waar het prima werkt (zonder het OOP gedeelte). Waarom werkt het nu dan echter niet? Alle hulp is welkom.
Inderdaad: wat gaat er fout?
Global is geen oo manier van werken.
Verder is het niet handig om gebruik je maken van globale variabelen voor de teksten.
ik heb ook al een soortgelijke manier geprobeerd, echter dan met een array in de language file. Echter deze wordt ook niet weergegeven (dat is dus wat er fout gaat)
Of, TJVB, vind jij een Singleton een verkapte global? (ik wel)
Toevoeging op 24/11/2010 12:10:31:
Tekst wordt niet weergegeven? Je selecteert de taal op grond van een waarde in POST, is er wel POSTdata?
language.class.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Language
{
// set var
public $language_file;
// set language
public function setLanguage($language = NULL){
// here the code that sets $language = 'nl';
require("includes/languages/" . $language . ".lang.php");
$this->language_file = $lang;
}
public function getLang(){
echo $this->language_file['hello_world'];
}
}
?>
class Language
{
// set var
public $language_file;
// set language
public function setLanguage($language = NULL){
// here the code that sets $language = 'nl';
require("includes/languages/" . $language . ".lang.php");
$this->language_file = $lang;
}
public function getLang(){
echo $this->language_file['hello_world'];
}
}
?>
nl.lang.php:
index.php:
e.e.a. zou nog iets korter gemaakt kunnen worden door iets kortere variabelen te gebruiken...
Ik vind de naam niet zo best gekozen, alleen. Je haalt namelijk niet een taal op, maar een vertaalde tekst. getTranslatedString() geeft dat beter weer. Hoezo kortere variabelen? Dat is Commodore-BASIC :)
In Drupal, een CMS dat in OO-stijl is geschreven zonder gebruik te maken van echte OO-constructs, heet de functie t(). Dat is pas kort! Je zoekt je alleen ongans als je wil opsporen waar je vertaalde teksten gebruikt... Kwestie van het midden houden.
Waarom heb je trouwens $language = NULL in setLanguage?
Dan doen je een require("includes/languages/.lang.php");
@Bas Cost Budde Er zit wel duidelijk verschil tussen global en Singleton maar dan gaan we heel erg offtopic
Bas Cost Budde op 24/11/2010 13:16:05:
Je vorige variant van getLang() was beter: daar geef je een parameter mee, dus kun je een van je teksten terugkrijgen.
ik zou hier inderdaad beter return kunnen gebruiken i.p.v. echo
Bas Cost Budde op 24/11/2010 13:16:05:
Ik vind de naam niet zo best gekozen, alleen. Je haalt namelijk niet een taal op, maar een vertaalde tekst. getTranslatedString() geeft dat beter weer. Hoezo kortere variabelen? Dat is Commodore-BASIC :)
ik had mijn originele functie er nog staan (die heet getLangText) maar voor testdoeleinden had ik dus even "text" eraf geknipt... ;-)
Lars Anderson op 24/11/2010 13:22:56:
ik zou hier inderdaad beter return kunnen gebruiken i.p.v. echo
Bas Cost Budde op 24/11/2010 13:16:05:
Je vorige variant van getLang() was beter: daar geef je een parameter mee, dus kun je een van je teksten terugkrijgen.
ik zou hier inderdaad beter return kunnen gebruiken i.p.v. echo
Yep. Het maakt je klasse bovendien makkelijker testbaar, en je brengt de verantwoordelijkheid terug--in dit geval voor de presentatie.
Ik probeer zelf altijd maar 1 echo te hebben die echt iets weergeeft.
Pim, geen bezwaar tegen je mening, uit didaktisch oogpunt zou ik willen vragen of je er ook een verklaring bij wil geven.
Ik heb ook maar 1 echo, de rest doe ik met var_dump :D Geintje! Smarty gebruik ik veel.
http://www.ibm.com/developerworks/opensource/library/os-php-7oohabits/
Lees die eens door. Ben op het moment ook bezig met het begrijpen van OOP (dus echte OOP en niet gewoon functie in klasses zetten).
2 boeken die ik nu aan het lezen ben:
PHP Object Oriented Solutions
PHP Objects Patterns and Practice