OOPHP en Output Buffering
Ik probeer output buffering toe te passen op mijn OOPHP script, maar het lijkt niet te werken.
Op de site van PHP zag ik iets over een callback function, dat het daar niet mee werkt, ik veronderstel dat het daar iets mee te maken kan hebben?
In principe is dit het probleem dat ik heb:
Ik heb een klasse Intranet, die alle andere klassen maakt, maar begint met het starten van de ob-processor, door in zijn constructor-methode aan te roepen:
Aan het einde van de constructor-methode wordt de output (die in feite wordt bepaald door de constructor van de klasse Intranet) verzonden door:
En dan denk ik dat lekker simpel op te lossen, door verder in de klasse mijn taal-klasse de strings te vertalen in de functie:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
public function ob_postprocess($buffer) {
$buffer = str_replace('LOGIN', 'Gerard', $buffer);
return $buffer;
}
?>
public function ob_postprocess($buffer) {
$buffer = str_replace('LOGIN', 'Gerard', $buffer);
return $buffer;
}
?>
Dit is enkel even een simpel voorbeeldje, maar uiteindelijk wordt daar de functie van de taalklasse aangeroepen en gaat die alles vertellen wat er in $buffer staat.
Maar dit werkt dus niet, wat kan ik er aan doen om er voor te zorgen dat dit wel werkend wordt?
Hartelijk dank voor jullie medewerking.
Groetjes,
Gerard Nijboer
Gewijzigd op 03/04/2011 00:30:18 door Gerard Nijboer
Heeft iemand een oplossing voor mij?
Wat werkt er niet? errors? (al gekeken in errorlog? php geeft hele duidelijke errors)
Deze hele werkwijze is verkeerd. Je zult (bijna) nooit gebruik hoeven te maken van output buffering.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Filter
{
private $search, $replace;
public function __construct($search, $replace)
{
$this->search = $search;
$this->replace = $replace;
}
public function apply($input)
{
return str_replace($this->search, $this->replace, $input);
}
}
$my_filter = new Filter('simpel', 'stom');
ob_start(array($my_filter, 'apply'));
echo "hallo daar";
echo "Dit is een simpel voorbeeld";
?>
class Filter
{
private $search, $replace;
public function __construct($search, $replace)
{
$this->search = $search;
$this->replace = $replace;
}
public function apply($input)
{
return str_replace($this->search, $this->replace, $input);
}
}
$my_filter = new Filter('simpel', 'stom');
ob_start(array($my_filter, 'apply'));
echo "hallo daar";
echo "Dit is een simpel voorbeeld";
?>
Maar dit is een heel slecht idee om met je vertaling te doen. Ik had ooit een telefoon (een LG geloof ik) die zo vertalingen deed. Hij vertaalde daardoor ook de inhoud van m'n smsjes en de namen van m'n contacten.
edit: voorbeeld een beter voorbeeld gemaakt
Gewijzigd op 05/04/2011 00:16:53 door Jelmer -
Ik weet dat dit leidt tot veel queries en dus niet wenselijk is, dus wie heeft de beste oplossing voor mij?
Laad alle vertalingen in in een array, en haal de vertalingen met getTranslation dan uit de array?
Jona than op 04/04/2011 20:35:45:
Deze hele werkwijze is verkeerd. Je zult (bijna) nooit gebruik hoeven te maken van output buffering.
Templating!