/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Stille og roligt igang med PHP OOP
Fra : Stig Sørensen


Dato : 20-03-09 04:17

Jeg har før spurgt til råds herinde omkring objekt orienteret
programmering i PHP.
Jeg har _ingen_ baggrundsviden omkring OOP overhovedet, men har
udemærket basisviden inden for PHP.

Jeg har derfor købt en ebook der forklarer OOP inden for PHP for
nybegyndere.
Jeg synes dog bogen skrider hastigt frem og havde brug for lige at
stoppe op, og prøve lidt for mig selv.

Jeg har forsøgt at lave en funktion som jeg kunne få brug for mange
gange, og har lagt det op her:

http://pastebin.com/m27779233

Det hele virker som jeg gerne vil have det til, men er det korrekt sat
sammen?

Jeg var specielt i tvivl om displayError funktionen, hvorvidt jeg
skulle lave en public property og så med $this->nyeProperty =
$errorPage;
Og så få det echo ud bagefter, men det kørte jeg fuldstændigt fast i
og blev godt forvirret.


Er jeg helt på herrens mark, eller kan jeg lystigt læse en smule
videre i håb om at få mere forståelse for OOP?


Ps. har valgt at have class og øvrigt PHP kode på én side da det ville
gøre det lidt lettere at vise her.

På forhånd tak for jeres kommentarer.

Mvh
Stig

 
 
Jan Nielsen (21-03-2009)
Kommentar
Fra : Jan Nielsen


Dato : 21-03-09 19:31

Stig Sørensen skrev:
> Jeg har før spurgt til råds herinde omkring objekt orienteret
> programmering i PHP.
> Jeg har _ingen_ baggrundsviden omkring OOP overhovedet, men har
> udemærket basisviden inden for PHP.
>
> Jeg har derfor købt en ebook der forklarer OOP inden for PHP for
> nybegyndere.
> Jeg synes dog bogen skrider hastigt frem og havde brug for lige at
> stoppe op, og prøve lidt for mig selv.
>
> Jeg har forsøgt at lave en funktion som jeg kunne få brug for mange
> gange, og har lagt det op her:
>
> http://pastebin.com/m27779233
>
> Det hele virker som jeg gerne vil have det til, men er det korrekt sat
> sammen?
>
> Jeg var specielt i tvivl om displayError funktionen, hvorvidt jeg
> skulle lave en public property og så med $this->nyeProperty =
> $errorPage;
> Og så få det echo ud bagefter, men det kørte jeg fuldstændigt fast i
> og blev godt forvirret.
>
>
> Er jeg helt på herrens mark, eller kan jeg lystigt læse en smule
> videre i håb om at få mere forståelse for OOP?
>
>
> Ps. har valgt at have class og øvrigt PHP kode på én side da det ville
> gøre det lidt lettere at vise her.
>
> På forhånd tak for jeres kommentarer.
>
> Mvh
> Stig
Hvis det skal laves pænt OOP, skal Test klassen kun håndtere logikken
omkring TextLength og retunere en fejl/ok.

Det er op til en anden klasse at vise dette til brugeren.
På den måde kan de samme klasser bruges uanset hvordan resultatet skal
vises, om det er html, console, eller noget helt andet.

Du kan f.eks. lave et række konstanter med dine fejl koder, så du kan
return ERR_TOO_SHORT som reelt bare er et tal.

Stig Sørensen (21-03-2009)
Kommentar
Fra : Stig Sørensen


Dato : 21-03-09 14:51

On Mar 21, 7:30 pm, Jan Nielsen
<nos...@mora.dk.byt.om.paa.mora.og.nospam> wrote:

> Hvis det skal laves pænt OOP, skal Test klassen kun håndtere logikken
> omkring TextLength og retunere en fejl/ok.
>
> Det er op til en anden klasse at vise dette til brugeren.
> På den måde kan de samme klasser bruges uanset hvordan resultatet skal
> vises, om det er html, console, eller noget helt andet.
>
> Du kan f.eks. lave et række konstanter med dine fejl koder, så du kan
> return ERR_TOO_SHORT som reelt bare er et tal.

Hej Jan. Kunne jeg be dig om at komme med et eksempel? Det kan vist
indsendes til pastebin.com på samme link som i mit første indlæg.
Har siddet og spekuleret i hvordan jeg skulle lave det således, men
synes ikke jeg kan finde ud af det.

Mvh
Stig


Jan Nielsen (22-03-2009)
Kommentar
Fra : Jan Nielsen


Dato : 22-03-09 12:56

Stig Sørensen skrev:
> On Mar 21, 7:30 pm, Jan Nielsen
> <nos...@mora.dk.byt.om.paa.mora.og.nospam> wrote:
>
>> Hvis det skal laves pænt OOP, skal Test klassen kun håndtere logikken
>> omkring TextLength og retunere en fejl/ok.
>>
>> Det er op til en anden klasse at vise dette til brugeren.
>> På den måde kan de samme klasser bruges uanset hvordan resultatet skal
>> vises, om det er html, console, eller noget helt andet.
>>
>> Du kan f.eks. lave et række konstanter med dine fejl koder, så du kan
>> return ERR_TOO_SHORT som reelt bare er et tal.
>
> Hej Jan. Kunne jeg be dig om at komme med et eksempel? Det kan vist
> indsendes til pastebin.com på samme link som i mit første indlæg.
> Har siddet og spekuleret i hvordan jeg skulle lave det således, men
> synes ikke jeg kan finde ud af det.
>
> Mvh
> Stig
>
http://pastebin.com/m145169ff

N/A (23-03-2009)
Kommentar
Fra : N/A


Dato : 23-03-09 17:36



N/A (22-03-2009)
Kommentar
Fra : N/A


Dato : 22-03-09 12:56



Stig Sørensen (23-03-2009)
Kommentar
Fra : Stig Sørensen


Dato : 23-03-09 06:35

On Mar 22, 12:55 pm, Jan Nielsen
<nos...@mora.dk.byt.om.paa.mora.og.nospam> wrote:

> http://pastebin.com/m145169ff

Hej tak for dit svar.

Jeg er kommet frem til denne løsning hvilket virker godt for mig:
http://pastebin.com/m7981677e

På den måde vil checkTextLength kun returnere TRUE og intet andet, da
man selv skal "aktivere" at få vist fejlene ved get_error.


Dan Storm (23-03-2009)
Kommentar
Fra : Dan Storm


Dato : 23-03-09 17:36

Stig Sørensen skrev:
> Jeg er kommet frem til denne løsning hvilket virker godt for mig:
> http://pastebin.com/m7981677e
>
> På den måde vil checkTextLength kun returnere TRUE og intet andet, da
> man selv skal "aktivere" at få vist fejlene ved get_error.

Din løsning er ufleksibel og inviterer til at lave dårlig kode.

Du tvinger brugeren til at anvende mere kode for at få et simpelt resultat.

Der er ikke noget formål i at have en funktion til at returnere noget,
hvis ikke du skal teste på resultatet.

Min tanke når jeg skal bruge din klasse er noget ala:
<?php
$name = $_POST["name"];
$testing = new Test();

$testing->checkTextLength($name, "Name", "0", "10");
if(!empty($testing->get_error()))
{
   //psuodo kode der fortæller valideringen at min form er fejlet
   $error = $testing->get_error();
}

?>

Og så kan jeg i øvrigt ikke selv bestemmet hvilken tekst der skal stå i
min fejlbesked, for den har du allerede defineret i klassen - medmindre
jeg naturligvis lavet noget preg_match() på den og erstatter den tekst
jeg skal bruge på de rigtige tidspunkter. Så meget for simpel genbrug.

Og hvad skal check_error bruges til?

Her er min idé - som ikke pr automatik er bedre (inspireret af Jans
ellers udmærkede løsning):
<url: http://pastebin.com/m6e30483f>

<?php
$name = $_POST["name"];
$testing = new Test();
$codes[1] = "kort";
$codes[2] = "langt";

if(!$testing->checkTextLength($name, "0", "10"))
   $error[] = "Navn er for ".$codes[$testing->errorCode];

?>

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

People who claim they don't let little things bother
them have never slept in a room with a single mosquito.

N/A (23-03-2009)
Kommentar
Fra : N/A


Dato : 23-03-09 22:05



Stig Sørensen (23-03-2009)
Kommentar
Fra : Stig Sørensen


Dato : 23-03-09 12:00

On Mar 23, 5:36 pm, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:

> Din løsning er ufleksibel og inviterer til at lave dårlig kode.
>
> Du tvinger brugeren til at anvende mere kode for at få et simpelt resultat.
>
> Der er ikke noget formål i at have en funktion til at returnere noget,
> hvis ikke du skal teste på resultatet.

Tak for forklaringen.


> Og så kan jeg i øvrigt ikke selv bestemmet hvilken tekst der skal stå i
> min fejlbesked, for den har du allerede defineret  i klassen - medmindre
> jeg naturligvis lavet noget preg_match() på den og erstatter den tekst
> jeg skal bruge på de rigtige tidspunkter. Så meget for simpel genbrug..

Det kan jeg godt se nu. Jeg har tiltaget mig din kode.


Jeg vil dog gerne have således, at hvis jeg har mange input felter, at
det hele køres gennem et array og så bliver samtlige fejl vist.
Jeg er dog kørt fuldstændigt fast og kan ikke lige længere finde hoved
eller hale i det. Kunne du evt hjælpe mig?


$test = new myClass();
$errorCode[0] = "ok"; //bare for testing
$errorCode[1] = "Teksten for kort..";
$errorCode[2] = "Teksten for lang..";

// Sådan kan det gøres med få felter
if(!$test->checkTextLength("Forlangtetnavnadasdasdadadas", "10",
"20"))
   echo $errorCode[$test->errorCode] . "<br />";

if(!$test->checkTextLength("mai", "5", "50"))
   echo $errorCode[$test->errorCode] . "<br />";

if(!$test->checkTextLength("", "8", "8"))
   echo $errorCode[$test->errorCode] . "<br />";

if(!$test->checkTextLength("dadasdas", "3", "60"))
   echo $errorCode[$test->errorCode] . "<br />";


echo "<br /><br />";

// Hvis jeg nu har mange felter ønsker jeg at kunne gøre sådanne noget
her ligende:
$checkFields["Navn"] = $test->checkTextLength
("Forlangtetnavnadasdasdadadas", "10", "20");
$checkFields["Email"] = $test->checkTextLength("mai", "5", "50");
$checkFields["Telefon"] = $test->checkTextLength("", "8", "8");
$checkFields["Adresse"] = $test->checkTextLength("dadasdas", "3",
"60");

foreach($checkFields as $field => $value) {
   if(!$value) {
      echo $field . " = " . $errorCode[$test->errorCode] . "<br />";
   }
}

Dan Storm (23-03-2009)
Kommentar
Fra : Dan Storm


Dato : 23-03-09 22:05

Stig Sørensen skrev:
> Jeg vil dog gerne have således, at hvis jeg har mange input felter, at
> det hele køres gennem et array og så bliver samtlige fejl vist.
> Jeg er dog kørt fuldstændigt fast og kan ikke lige længere finde hoved
> eller hale i det. Kunne du evt hjælpe mig?


Jeg er ikke sikker på hvordan det skal forstås, hverken ud fra din
forklaring eller ud fra dit kode eksempel; men det er nok også fordi jeg
har en opfattelse af at du overkomplicerer tingene.

Det jeg mener du siger er at du vil have alle dine input felter
valideret gennem din checkTextLength() funktion? Jeg må spørge om
hvilket formål det skulle have?

Til sidebenet; Helt optimalt ville det være at lave en en klasse der der
kunne behandle og validere dine inputfelter efter type og efter behov.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste