[OOP] talen systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Lars Anderson

Lars Anderson

24/11/2010 10:43:52
Quote Anchor link
Ik wil een multi taal systeem bouwen in PHP OOP zonder een database te gebruiken. Ik heb dit gedaan:

language.class.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
  }  
}

?>


nl.lang.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// NL taal bestand
$hello_world = "Hallo wereld";
?>


index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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.
 
PHP hulp

PHP hulp

22/12/2024 19:58:02
 
Bas Cost Budde

Bas Cost Budde

24/11/2010 11:52:48
Quote Anchor link
Inderdaad: wat gaat er fout?
 
TJVB tvb

TJVB tvb

24/11/2010 12:06:14
Quote Anchor link
Je zoekt nu de variabele $hello_world waarvan je hoopt dat die al global gezet is.
Global is geen oo manier van werken.

Verder is het niet handig om gebruik je maken van globale variabelen voor de teksten.
 
Lars Anderson

Lars Anderson

24/11/2010 12:08:52
Quote Anchor link
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)
 
Bas Cost Budde

Bas Cost Budde

24/11/2010 12:09:41
Quote Anchor link
jah, gaan we specifiek doen... maak dan een singleton van Language, die met zijn instance-methode de juiste afgeleide klasse teruggeeft; binnen de klasse kun je een (set van) array(s) hanteren voor je vertalingen.

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?
 
Lars Anderson

Lars Anderson

24/11/2010 13:02:57
Quote Anchor link
sorry nu gaan mijn oren een beetje klapperen. Ik heb inmiddels een oplossing gevonden die werkt met een array dus:

language.class.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'];
    }
}

?>


nl.lang.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$lang
= array(
    'hello_world' => "Hallo wereld"
)
?>


index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$language
= new Language();
$language->setLanguage( 'nl' );

?>


e.e.a. zou nog iets korter gemaakt kunnen worden door iets kortere variabelen te gebruiken...
 
Bas Cost Budde

Bas Cost Budde

24/11/2010 13:16:05
Quote Anchor link
Je vorige variant van getLang() was beter: daar geef je een parameter mee, dus kun je een van je teksten terugkrijgen.

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.
 
TJVB tvb

TJVB tvb

24/11/2010 13:17:52
Quote Anchor link
Begin eens met dit bovenaan je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',10:
?>



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
 
Lars Anderson

Lars Anderson

24/11/2010 13:22:56
Quote Anchor link
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... ;-)
 
Bas Cost Budde

Bas Cost Budde

24/11/2010 13:25:44
Quote Anchor link
Lars Anderson op 24/11/2010 13:22:56:
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.
 
Pim -

Pim -

24/11/2010 13:43:56
Quote Anchor link
Ik probeer zelf altijd maar 1 echo te hebben die echt iets weergeeft.
 
Bas Cost Budde

Bas Cost Budde

24/11/2010 13:50:32
Quote Anchor link
Hoe werkt de presentatielaag van je applicatie? Valt buiten het bereik van de oorspronkelijke vraag.

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.
 
Ilyes Ahidar

Ilyes Ahidar

24/11/2010 22:39:57
Quote Anchor link
TIP van de dag ;)
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.