Feedback op PHP OOP code

Gestart doorTom9 reacties117 weergaven

10 berichten · pagina 1 van 1

Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Ik ben PHP OOP aan het leren en ik vraag me af of dit het zo moet of dat ik het helemaal verkeerd doe.

Als ik het niet goed doe, zeg dan aub hoe ik het wel goed kan doen.

init.php

Codeblok (voorbeeld.php):

1
2
3
4
5


spl_autoload_register(function($class){
requireclasses/ . $class . .php;
})

?>

index.php

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14


requireinit.php;
?>

$x = new formCheck();
$c = new formSend();

echo $x->check($_POST[textInput], $_POST[moreInput]);
?>

formcheck.php

Codeblok (voorbeeld.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


class formCheck{
public $textInput;
public $moreInput;

public function check($textInput, $moreInput){
if($_SERVER[REQUEST_METHOD] == POST){
if(empty($textInput)){
echoThe first textbox was empty.
;
}

if(empty($moreInput)){
echoThe second textbox was empty.;
}

else{
//Send code
}
}
}
}

?>
0
Berichten
518
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik doe er een klein gokje op dat [c]echo $x->check($_POST[textInput], $_POST[moreInput]);[/c] een error gaat geven als [c]$_POST[textInput][/c] of [c]$_POST[moreInput][/c] niet bestaan.

// PHP lang geleden
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Het werkt gewoon ook al vul je niks in de forms.
0
Berichten
518
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Tom schreef:
Het werkt gewoon ook al vul je niks in de forms.
Omdat je dan [c]textInput=&moreInput=[/c] stuurt, verwijder de inputs en verstuur het nog eens.

toevoeging op 6 februari 2015, 19:39:25:
Verder raad ik je af om [func]empty()[/func] te gebruiken. [func]Trim()[/func] de string en vergelijk het met . Ook is [c]protected $y;[/c] overbodig en zonder meer code is het nogal moeilijk te beoordelen.
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Wat bedoel je precies? Met textInput=&moreInput=?
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Kitnkiller schreef:
Eerdere citaten tonen
Tom schreef:
Het werkt gewoon ook al vul je niks in de forms.
Omdat je dan [c]textInput=&moreInput=[/c] stuurt, verwijder de inputs en verstuur het nog eens.

toevoeging op 6 februari 2015, 19:39:25:
Verder raad ik je af om [func]empty()[/func] te gebruiken. [func]Trim()[/func] de string en vergelijk het met . Ook is [c]protected $y;[/c] overbodig en zonder meer code is het nogal moeilijk te beoordelen.
Het is POST he
0
Tom

Lid · Topicstarter

Berichten
3.868
Reputatie
0
Punten
0,02
Lid sinds
Laatst gezien
Wat ik graag wil weten is of ik OOP ongeveer begrijp of dat dit helemaal fout is?
0
Berichten
4.214
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylan schreef:
Eerdere citaten tonen
Kitnkiller schreef:
Eerdere citaten tonen
Tom schreef:
Het werkt gewoon ook al vul je niks in de forms.
Omdat je dan [c]textInput=&moreInput=[/c] stuurt, verwijder de inputs en verstuur het nog eens.

toevoeging op 6 februari 2015, 19:39:25:
Verder raad ik je af om [func]empty()[/func] te gebruiken. [func]Trim()[/func] de string en vergelijk het met . Ook is [c]protected $y;[/c] overbodig en zonder meer code is het nogal moeilijk te beoordelen.
Het is POST he
Zo ziet een POST er ook uit. Zie je alleen niet omdat het in de headers zit maar dat is op dat format gebaseerd.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Dat is geen OOP code.

toevoeging op 7 februari 2015, 22:24:10:
Ik verwijs je naar PHPtuts.nl. Daar word heel duidelijk uitgelegd wat OOP precies is.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Gebruik van classes !== OOP code. Zoals raoul dus al zegt, is dit geen OOP code.

Als we dat even negeren heb ik wel wat feedback voor je:

In je formcheck.php vraag je in de code $_SERVER[REQUEST_METHOD] op. Het is bad practice om rechtstreeks naar globale variabelen te refereren in je oop code. Het is netter om dit via de parameters door te geven of bij het aanmaken van het object via de constructor. Hierdoor zie je duidelijk welke gegevens een bepaald classe nodig heeft, zonder de code door te spitten. Ook kan je op deze manier makkelijker je code testen met unittests omdat je mock-waardes en mock-objecten kan doorgeven.

Ook moet je eigenlijk nooit waardes [c]echo[/c]-en binnen een functie. Wanneer een functie een waarde terug moet geven maak je gebruikt van [c]return[/c]. Deze teruggegeven waarde kan je dan vervolgens ergens anders in je code gebruiker door deze op te slaan in een variabele, of meteen te [c]echo[/c]-en.

Verder heeft je autoloader geen fallback-mechanisme. Wanneer de class niet gevonden kan worden dan krijg je een PHP fatal error van de require functie.

Allerlaatst is de empty() functie erg raar wat betreft het opvangen van wat écht empty is. Zo zal empty() true teruggeven bij:
"" (lege string)
0 (0 als integer)
0.0 (0 als float)
"0" (0 als string)
NULL
FALSE
Array() (lege array)
en elke variabele die wel gedefinieerd is, maar geen waarde heeft.
(bron: http://php.net/empty)

Zoals je al ziet in de verschillende vormen van 0 die als empty gezien worden, is de empty() functie niet altijd de beste manier om te kijken of de string characters bevat. Hou hier rekening mee.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren