string klasse (stmt achtig)

Door Leroy Boerefijn, 20 jaar geleden, 3.355x bekeken

Dit is een klasse, die ongeveer hetzelfde werkt als de mysqli_stmt klasse..
het verschil is, dat het dus met strings werkt..

De functies:
prepare - gebruik: $var->prepare("zin"); de zin die je gaat veranderen enz. (je kunt in die zin vraagtekens (?) gebruiken om een variabele aan te geven.)
bind_param - gebruik: $var->bind_param([$var1, [$var2, [enz.]]]); deze variabele vervangen de vraagtekens, zijn er geen vraagtekens, gebruik deze functie dan zonder variabele (zorg dat er evenveel variabele in staan als dat er vraagtekens in de prepare zin staan!)
param_count - gebruik: $var->param_count(); geeft het aantal vraagtekens in de prepare zin terug
execute - gebruik: $var->execute(); geeft de uiteindelijke zin terug
free_result - gebruik: $var->free_result(); maakt de resultaten helemaal leeg
close - gebruik: $var->close(); uitgebreidere versie van free_result, zet alles terug naar de beginwaarden (wist dus ook de error's)

De variabel die van buitenaf aanspreekbaar zijn:
error - gebruik: $var->error; geeft het errorbericht terug ("No error's yet!" als er geen error's zijn)
errno - gebruik: $var->errno; geeft het errornummer terug
* 0 - geen error
* 1000 - als prepare al gebruikt is
* 1001 - voor een lege zin bij de prepare functie
* 1002 - als je dingen met een niet gepreparede string wilt doen
* 1003 - als de variabele niet gezet zijn
* 1004 - te weinig argumenten in bind_param
* 1005 - te veel argumenten in bind_param


de string die opgegeven word in prepare wordt volledig gescaped zodat het geen schade aan je script kan geven, dit wordt ook gedaan met de variabele uit bind_param

ik hoop dat het wat is,
gr. leroy

Voorbeeld: http://nog niet (server problemen)

Gesponsorde koppelingen

PHP script bestanden

  1. string-klasse-stmt-achtig

 

Er zijn 17 reacties op 'String klasse stmt achtig'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Henk
Henk
20 jaar geleden
 
0 +1 -0 -1
Dus nu kan je in plaats van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo sprintf ( 'The quick brown %s jumped over the %s dog' , 'fox' , 'lazy' ); ?>
dit doen?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
        /*----------------------------------------------
        -------------------------------------------------
        DONT REMOVE THIS BLOCK!!!
        -------------------------------------------------
        Copyright
        Created by: libia
        Created on: 15-09-07 (DD-MM-YY)
        -------------------------------------------------
        You can use this script,
        but you may not call it your script!
        -------------------------------------------------
        ----------------------------------------------*/

error_reporting(E_ALL);

//include the class!
include("stringClass.php");

//and a little example
$string = new String();
$string->prepare("The quick brown ? jumped over the ? dog");
if($string->errno == 0)
{

    if($string->errno == 0)
    {

        $string->bind_param("fox", "lazy");
        if($string->errno == 0)
        {

            echo $string->execute() . '<br />';
            if($string->errno != 0)
                echo '<b>(error: line ' . __line__ . ') ' . $string->errno . ': ' . $string->error . '</b>';
        }

        else
            echo '<b>(error: line ' . __line__ . ') ' . $string->errno . ': ' . $string->error . '</b>';
    }

    else
        echo '<b>(error: line ' . __line__ . ') ' . $string->errno . ': ' . $string->error . '</b>';
}

else
    echo '<b>(error: line ' . __line__ . ') ' . $string->errno . ': ' . $string->error . '</b>';

$string->free_result();
$string->close();
?>
Leroy Boerefijn
Leroy Boerefijn
20 jaar geleden
 
0 +1 -0 -1
aah.. die kende ik nog niet :P
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
Ook is het misschien handig eens naar exceptions te kijken, je hebt nu 4x de zelfde fout afhandeling, beetje dubbele code.
Leroy Boerefijn
Leroy Boerefijn
20 jaar geleden
 
0 +1 -0 -1
je bedoelt in het gebruiksvoorbeeld? dit is maar een voorbeeld, dus als je het anders wilt.. dan mag dat..

edit je kunt het trouwens ook allemaal in een functie stoppen.. maar het idee was dus om de mysqli na te maken ;)
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Je zou ook gewoon sprintf() kunnen gebruiken :P

Maar, ik moet zeggen, mooi gevonden :0
Henk
Henk
20 jaar geleden
 
0 +1 -0 -1
Dat zeg ik toch, iltar van der berg :-P
Pim Vernooij
Pim Vernooij
20 jaar geleden
 
0 +1 -0 -1
Paar opmerkingen over de scopes die je gebruikt in je klasse:
- Waarom die heb je je property's protected gemaakt? Ik zie niet dat de class ge-extend word, dus ze kunnen net zo goed private.
- Je hebt bij geen enkele method een scope toegevoegd, wel bij je property's maar niet bij de methods.. Waarom?
- Ik zie dat je object gemaakt is om hergebruikt te worden, dan zou het mooier zijn om er een singleton van te maken.

Over de klasse zelf: sprintf vind ik een elegantere oplossing :-P
Willem vp
Willem vp
20 jaar geleden
 
0 +1 -0 -1
@Pim Vernooij:

Waarom geen singleton?

"Singletons can be hazardous to your health, seriously jeopardize your family’s safety, and have been classified as “terrorist patterns” by the U.S. government."

Lees het complete verhaal hier.
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Wat pim bedoelt met Singleton is dat je altijd prepare aanroept op de klasse. Singleton zou hier niet kunnen, aangezien prepare wel de inhoud aangaat, en je dus aparte instanties nodig hebt.

Andere oplossing is een factory: String::prepare('wie ? zegt moet ook ? zeggen'), wat vervolgens een verse instantie van String teruggeeft. Of gewoon prepare() en de constructor verenigen: new String('wie ? zegt'); Want prepare moet je hoe dan ook aanroepen.

Maar helaas, sprintf is inderdaad eleganter. Daarmee kan je ook aangeven dat iets als integer of float behandeld moet worden, dat het bijvoorbeeld 6 tekens lang moet zijn, en dat de overige ruimte moet worden opgevuld met nulletjes. En je kan de parameters omwisselen. En het is snel :)

En over die protected properties. Lijkt mij eigenlijk wel een goeie gewoonte om ze standaard protected te maken in plaats van private. Zo is de klasse te uit te breiden qua functionaliteit via extend. Zou ik niet bij de properties kunnen komen in mijn extend, dan kan ik ook weinig uitbreiden. private lijkt mij meer voor echt interne data, data die alleen geschikt is voor 1 bepaalde method.
Sir Psycho Sexy
Sir Psycho Sexy
20 jaar geleden
 
0 +1 -0 -1
Dit is handig! Nu kan ik tenminste 44 regels schrijven om een string te maken! Echt han-dig!
Leroy Boerefijn
Leroy Boerefijn
20 jaar geleden
 
0 +1 -0 -1
@sir psycho sexy, (klinkt een beetje aso die naam trouwens :P) zijn minder dan 44 regels!!
Sir Psycho Sexy
Sir Psycho Sexy
20 jaar geleden
 
0 +1 -0 -1
Hey, meneertje Leroy (en dat is geen sjappie-naam?), Sir Psycho Sexy is dus mooi geen "aso naam", en het zijn wel gewoon 44 regels.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php en ?>
meegerekend, die zitten in elk script...

En laat ik het niet weer zien dat je mijn naam asociaal noemt, want dan heb je een hele grote groep Red Hot Chili Pepper fans die niet zo blij met je zijn >:)
Kalle P
Kalle P
20 jaar geleden
 
0 +1 -0 -1
mensen mensen of moett ik zeggen kindjes kindjes.

Kalm down.
Kees Schepers
kees Schepers
20 jaar geleden
 
0 +1 -0 -1
De manier dat je de klasse hebt opgebouwt vind ik totaal niet duidelijk en deze tijd. Wel is het idee van een string klasse zo slecht nog niet, dan kun je ook type hinting toepassen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function someFunction(string $param) {
  $param->encode('utf8');
  echo $param;
}

?>

met de magic __toString() bijvoorbeeld.
Leroy Boerefijn
Leroy Boerefijn
20 jaar geleden
 
0 +1 -0 -1
@sir p... s.., sorry :P
leroy is trouwens gewoon mijn naam.. en ik wist niet dat jouw naam uit red hot chilli peppers komt :D
en @kees, ik snap je reactie niet helemaal :D
Arend a
Arend a
20 jaar geleden
 
0 +1 -0 -1
een mooi voorbeeld van hoe je iets simpels ingewikkeld kan maken.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Sir Psycho Sexy
Sir Psycho Sexy
20 jaar geleden
 
0 +1 -0 -1
Ik reageerde echt kudt daar. Zo hé. Mja, excuses aanvaardt hoor Leroy.

Leuke naam trouwens...

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

Inhoudsopgave

  1. string-klasse-stmt-achtig

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.