Versio

string klasse (stmt achtig)

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

BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  

PHP script bestanden

  1. string-klasse-stmt-achtig

 

17 reacties op 'string klasse (stmt achtig)'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Henk
Henk
6 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
6 jaar geleden
 
0 +1 -0 -1
aah.. die kende ik nog niet :P
Bo az
Bo az
6 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
6 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
6 jaar geleden
 
0 +1 -0 -1
Je zou ook gewoon sprintf() kunnen gebruiken :P

Maar, ik moet zeggen, mooi gevonden :0
Henk
Henk
6 jaar geleden
 
0 +1 -0 -1
Dat zeg ik toch, iltar van der berg :-P
Pim Vernooij
Pim Vernooij
6 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
6 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 rrrr
Jelmer rrrr
6 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
6 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
6 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
6 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
6 jaar geleden
 
0 +1 -0 -1
mensen mensen of moett ik zeggen kindjes kindjes.

Kalm down.
Kees Schepers
kees Schepers
6 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
6 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
6 jaar geleden
 
0 +1 -0 -1
een mooi voorbeeld van hoe je iets simpels ingewikkeld kan maken.
Sir Psycho Sexy
Sir Psycho Sexy
5 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.

  • Labels
  • Geen tags toegevoegd.
Get Adobe Flash player