Meerdere functies in 1

Door Iltar van der berg, 15 jaar geleden, 2.330x bekeken

Met dit scriptje kan je de waarde van een string door deze functie halen, en vervolgens meerdere dingen laten doen.

stel deze waarde staat in je database.
$value = 'My value with some
new lines
and \' and <html> tags.';

die wil je uitlezen met strip slashes, html entities en nl2br.

de doe je dit:
echo multiFunc($value,0,0,1,1,1,0,0,0);

Wil je een wachtwoord met md5 doen en door sha1 halen?
echo multiFunc($value,0,0,0,0,0,0,1,1);

Of een query beveiligen?
echo multiFunc($value,1,0,0,0,0,0,0,0);

0 = niet gebruiken
1 = wel gebruiken

Bugs of ideeën?
plaatsen maar :)

Voorbeeld: http://N/A

Gesponsorde koppelingen

PHP script bestanden

  1. meerdere-functies-in-1

 

Er zijn 14 reacties op 'Meerdere functies in 1'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jeroen
Jeroen
15 jaar geleden
 
0 +1 -0 -1
grappig idee, leuk script :)
Jens V
Jens V
15 jaar geleden
 
0 +1 -0 -1
mooi idee inderdaad, maar zoiets zou ik toch niet snel gebruiken:D
Je zou de volgorde van je 0 en 1 van buiten moeten leren om bv htmlentities aan te zetten...

Voor de rest is ie wel mooi ja:d

Jens
Rolf Flikker op
Rolf Flikker op
15 jaar geleden
 
0 +1 -0 -1
Leuk idee, maar geef mij toch maar classes :).

@Jens: Met de meeste php-editors is dat geen probleem meer, zodra je een functie typt krijg je vaak een lijstje met alle mogelijk argumenten.
Niek s
niek s
15 jaar geleden
 
0 +1 -0 -1
volgens mij is md5($tekst) minder typwerk als deze manier :/
Iltar van der berg
iltar van der berg
15 jaar geleden
 
0 +1 -0 -1
ja dat klopt... maar nu kan je er ook meteen een sha1 doorheen gooien..

rolf, kan dit dan met een class?
- SanThe -
- SanThe -
15 jaar geleden
 
0 +1 -0 -1
Geinig scriptje. Het is netjes en zeer overzichtelijk gescript.
Klaasjan Boven
Klaasjan Boven
15 jaar geleden
 
0 +1 -0 -1
Leuk bedacht en gedAAN
Rolf Flikker op
Rolf Flikker op
15 jaar geleden
 
0 +1 -0 -1
@iltar okay inderdaad, het chainen gaat minder makkelijk met classes, maar het principe van meerdere functies bij elkaar bewaren, daar gebruik ik dan classes voor.

Trouwens, dit gebruik ik ook wel eens:
Zend filter chains. Stuk minder efficient maar wel makkelijk uitbreidbaar :)
Jens V
Jens V
15 jaar geleden
 
0 +1 -0 -1
@Rolf: Mooi zo, dat wist ik niet.. Ik gebruik nog altijd men vertrouwde phpdesigner 2005:)
Vandaar waarschijnlijk...
Jan Koehoorn
Jan Koehoorn
15 jaar geleden
 
0 +1 -0 -1
Bij een functie als deze is het handig om voorgedefinieerde constanten te maken. Anders moet je precies weten welke argumenten waar komen en moet je elke keer als je de functie gebruikt weer opzoeken hoe het ook weer zat.

De gebruikelijke methode is dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    define ('VALUE', 1);
    define ('REAL_ESCAPE', 2);
    define ('ADD_SLASHES', 4);
    define ('STRIP_SLASHES', 8);
    // enzovoort, steeds machten van 2 gebruiken
?>

Je kunt de functie dan bijvoorbeeld zo aanroepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo multiFunc ($waarde, VALUE | ADD_SLASHES);
?>

De functiedefinitie ziet er dan zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
    function multiFunc ($value, $flags) {
        if ($flags & VALUE) {
        // doe iets met value
        }
        if ($flags & ADD_SLASHES) {
        // doe iets met addslashes
        }
        // enzovoort
    }
?>
PHP erik
PHP erik
15 jaar geleden
 
0 +1 -0 -1
Ik vind het handiger om de multiFunctie flexibel te houden zodat je makkelijk en snel nieuwe functies kan toevoegen.

In mijn volgende voorbeeld kun je een nieuwe functie in je multiFunc toevoegen door enkel de functienaam aan de array toe te voegen. Geen nieuwe if's en else's dus. En je hoeft niet persé alle arguments mee te geven, dus gewoon multiFunc($value, 0, 1) werkt ook.

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
24
25
26
<?php

function multiFunc($value)
{

    $functions =
            array(
                'mysql_real_escape_string', // 1
                'addslashes',                 // 2
                'stripslashes',             // 3
                'nl2br',                    // 4
                'htmlentities',                // 5
                'htmlspecialchars',            // 6
                'md5',                        // 7
                'sha1'                        // 8
            );
    
    foreach (func_get_args() as $key => $arrayValue) {
        if ($key > 0 && $arrayValue == 1) {
            $value = $functions[$key-1]($value);
        }
    }

    
    return $value;
}


?>


Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

$value
= "Foo\r\n<br>'foo'";

echo multiFunc($value, 0, 1, 0, 1, 1, 1); // zie array in de functie voor functies
echo multiFunc($value, 0, 1);             // addslashes

?>


Edit:
Ik ben het er overigens (natuurlijk) mee eens dat je dit beter via een class kan oplossen.
Rudie dirkx
rudie dirkx
15 jaar geleden
 
0 +1 -0 -1
Sowieso niet beter in een class, wat wil je op gaan slaan? Het is duidelijk een functie. Maar je kan natuurlijk beter de md5 en sha1 van php gebruiken en gewoon om elkaar heen zetten. Je functie is zwaar onduidelijk en onoverzichtelijk!
Derk nvt
Derk nvt
15 jaar geleden
 
0 +1 -0 -1
Vind het leuk bedacht... Maar denk niet dat het echt nuttig is, wat je doet is een andere benaming geven voor enkele functies, en voegt de functie toe om 'makkelijk' meerdere functies over 1 string te laten gaan. Echter lijkt me het makkelijker, én overzichtelijker om de functies gewoon aan te roepen waar je ze nodig hebt.

Die enen en nullen zal ik niet snel uit mijn hoofd kennen...
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
PHP erik
PHP erik
15 jaar geleden
 
0 +1 -0 -1
Quote:
Sowieso niet beter in een class, wat wil je op gaan slaan? Het is duidelijk een functie. Maar je kan natuurlijk beter de md5 en sha1 van php gebruiken en gewoon om elkaar heen zetten. Je functie is zwaar onduidelijk en onoverzichtelijk!


Met een class kun je veel dingen automatisch laten gaan, vooral addslashes() en dat soort functies zijn handig om via een class te laten gaan. Maar dan wel een heel andere structuur dan deze functie ja.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. meerdere-functies-in-1

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.