OOPHP en Output Buffering

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerard Nijboer

Gerard Nijboer

03/04/2011 00:28:49
Quote Anchor link
Hey,

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ob_start("ob_postprocess"); ?>


Aan het einde van de constructor-methode wordt de output (die in feite wordt bepaald door de constructor van de klasse Intranet) verzonden door:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ob_end_flush(); ?>


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

PHP hulp

24/11/2024 11:20:30
 
Gerard Nijboer

Gerard Nijboer

04/04/2011 20:08:38
Quote Anchor link
Heeft iemand een oplossing voor mij?
 
Tim selier

tim selier

04/04/2011 20:30:13
Quote Anchor link
Wat werkt er niet? errors? (al gekeken in errorlog? php geeft hele duidelijke errors)
 
- -

- -

04/04/2011 20:35:45
Quote Anchor link
Deze hele werkwijze is verkeerd. Je zult (bijna) nooit gebruik hoeven te maken van output buffering.
 
Jelmer -

Jelmer -

05/04/2011 00:14:45
Quote Anchor link
Als je een method als callback wilt geven aan PHP moet je hem ook de instantie van het object geven waarvan hij de callback moet aanroepen. En als dat niet hoeft (omdat je er een statische functie van maakt) dan moet je alsnog de classname meegeven:
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
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";
?>


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 -
 
Pim -

Pim -

05/04/2011 12:19:39
Quote Anchor link
Kijk eens naar callbacks.

@Jelmer, komisch...
 
Gerard Nijboer

Gerard Nijboer

07/04/2011 17:54:57
Quote Anchor link
Heb het probleem nu omgedraaid: Overal waar ik een string neer wil zetten, wordt de klasse Language aangeroepen met de methode getTranslation($Tag), waarop hij de database doorzoekt naar de Tag.
Ik weet dat dit leidt tot veel queries en dus niet wenselijk is, dus wie heeft de beste oplossing voor mij?
 
Joris van Rijn

Joris van Rijn

07/04/2011 18:06:32
Quote Anchor link
Laad alle vertalingen in in een array, en haal de vertalingen met getTranslation dan uit de array?
 
Pim -

Pim -

07/04/2011 18:08:03
Quote Anchor link
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!
 



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.