Tutorials
Overzichtelijk programmeren en debuggen
Je eigen gebruiksaanwijzing over hoe en waarom
Pagina 1
Inleiding
Waar gaat deze tutorial over?
Deze tutorial gaat over overzichtelijk programmeren en debuggen. Debuggen heeft daar heel erg mee te maken!!!
Debuggen en overzichtelijk programmeren? Wtf?
Het heeft heel erg met elkaar te maken, want hoe overzichtelijker je programmeert,
hoe makkelijker en sneller het debuggen is.
Waarom deze tut schrijven?
Omdat ik op mijn oude site heel veel mensen zag die niet overzichtelijk programmeerden. En daardoor bij het debuggen vastliepen, en ik kwam vanmorgen toch al als een zombie om 12.00 uur uit me bed ;) dus ik dacht, laten we iets nuttigs doen. ;)
Deze tutorial gaat over overzichtelijk programmeren en debuggen. Debuggen heeft daar heel erg mee te maken!!!
Debuggen en overzichtelijk programmeren? Wtf?
Het heeft heel erg met elkaar te maken, want hoe overzichtelijker je programmeert,
hoe makkelijker en sneller het debuggen is.
Waarom deze tut schrijven?
Omdat ik op mijn oude site heel veel mensen zag die niet overzichtelijk programmeerden. En daardoor bij het debuggen vastliepen, en ik kwam vanmorgen toch al als een zombie om 12.00 uur uit me bed ;) dus ik dacht, laten we iets nuttigs doen. ;)
Pagina 2
De rest
Variablen
Als je variablen gebruikt, geef ze duidelijke namen, waaraan je meteen ziet wat voor data inzit.
Inplaats van $SETTINGS['mysql']['user'] hadden we ook $user kunnen nemen. Maar stel dat we ook een postgresql database tot onze beschikking hebben, welke data zit erin, zal je je afvragen. Zit er data is voor postgresql, of data voor mysql?
Let op dat je niet overal duidelijke namen voor hoeft te gebruiken. Bijvoorbeeld bij een for loop hoeft dat niet.
Waarom zou je dit doen:
<?php
for ($getal=10, $getal>15, $getal++) {
print $getal;
}
?>
Als je dit ff snel kan
<?php
for ($i=10, $i>15, $i++) {
print $i;
}
?>
Tabs
Het een-na-laatste stuk van deze tut, wel belangrijk.
Gebruik tabs bij programmeren. Zeg zelf. Dit:
<?php
if ($var = 7) {
if($i = 8) {
doe_dit();
}
} else {
doe_dat();
} ?>
ziet er toch een stuk beter uit als dit:
<?php
if ($var = 7) {
if($i = 8) {
doe_dit();
}
} else {
doe_dat();
} ?>
Editor
Om overzichtelijk te kunnen programmeren moet je ook een goeie editor hebben. Hier een lijstje:
-+ Je editor moet php en html aankunnen
-+ Highlighting is belangrijk!
-+ Auto-indent, dat ie automatisch tabs doet is heel fijn!
-+ Lijnnummers is fijn bij debuggen.
- Een Html bar is niet 'required', maar wel fijn!
- Plugins voor bijvoorbeeld sql syntax is alleen maar handig ;)
- Spellingcontrole
- Auto-save
- Meerdere pagina's in tabbladen ipv van meerdere vensters
Zelf gebruik ik editplus, kijk voor alle editors bij de links op phphulp.
Debuggen
Als je all deze dingen goed doet, en overzichtelijk programmeerd, zal het debuggen je goed vergaan.
Krijg je dit:
Parse error on C:/apache/htdocs/etc... on line 527 missing argument for function get_tables();
Parse eror on C:/apache/htdocs/etc... on line 526 unexpted '}'
Ga je met je editor met regelnummers naar lijn 527 toe,
je leest het commentaar, je kijkt naar je tabs, je lost het probleem heel snel op.
Vergeet nooit als je mysql gebruikt, mysql de 'kans' te geven om zijn error te sorten. Dus nooit dit:
<?
$result = mysql_query($sql);
?>
maar dit:
<?
$result = mysql_query($sql) or die("Error on line ".__LINE__.": ".mysql_error());
?>
Ik hoop dat dit helpt op je weg naar professioneel programmeur ;)
Groeten,
Sebas
Als je variablen gebruikt, geef ze duidelijke namen, waaraan je meteen ziet wat voor data inzit.
Inplaats van $SETTINGS['mysql']['user'] hadden we ook $user kunnen nemen. Maar stel dat we ook een postgresql database tot onze beschikking hebben, welke data zit erin, zal je je afvragen. Zit er data is voor postgresql, of data voor mysql?
Let op dat je niet overal duidelijke namen voor hoeft te gebruiken. Bijvoorbeeld bij een for loop hoeft dat niet.
Waarom zou je dit doen:
<?php
for ($getal=10, $getal>15, $getal++) {
print $getal;
}
?>
Als je dit ff snel kan
<?php
for ($i=10, $i>15, $i++) {
print $i;
}
?>
Tabs
Het een-na-laatste stuk van deze tut, wel belangrijk.
Gebruik tabs bij programmeren. Zeg zelf. Dit:
<?php
if ($var = 7) {
if($i = 8) {
doe_dit();
}
} else {
doe_dat();
} ?>
ziet er toch een stuk beter uit als dit:
<?php
if ($var = 7) {
if($i = 8) {
doe_dit();
}
} else {
doe_dat();
} ?>
Editor
Om overzichtelijk te kunnen programmeren moet je ook een goeie editor hebben. Hier een lijstje:
-+ Je editor moet php en html aankunnen
-+ Highlighting is belangrijk!
-+ Auto-indent, dat ie automatisch tabs doet is heel fijn!
-+ Lijnnummers is fijn bij debuggen.
- Een Html bar is niet 'required', maar wel fijn!
- Plugins voor bijvoorbeeld sql syntax is alleen maar handig ;)
- Spellingcontrole
- Auto-save
- Meerdere pagina's in tabbladen ipv van meerdere vensters
Zelf gebruik ik editplus, kijk voor alle editors bij de links op phphulp.
Debuggen
Als je all deze dingen goed doet, en overzichtelijk programmeerd, zal het debuggen je goed vergaan.
Krijg je dit:
Parse error on C:/apache/htdocs/etc... on line 527 missing argument for function get_tables();
Parse eror on C:/apache/htdocs/etc... on line 526 unexpted '}'
Ga je met je editor met regelnummers naar lijn 527 toe,
je leest het commentaar, je kijkt naar je tabs, je lost het probleem heel snel op.
Vergeet nooit als je mysql gebruikt, mysql de 'kans' te geven om zijn error te sorten. Dus nooit dit:
<?
$result = mysql_query($sql);
?>
maar dit:
<?
$result = mysql_query($sql) or die("Error on line ".__LINE__.": ".mysql_error());
?>
Ik hoop dat dit helpt op je weg naar professioneel programmeur ;)
Groeten,
Sebas
Pagina 3
Commentaar
Commentaar is zeer belangrijk bij een programma. Zeg wat er zou moeten gebeuren of wat het programma doet. Niks is zo erg als debuggen zonder commentaar erbij. Niks is zo erg als eerst een programma maken, en daarna de commentaar erbij moet prutsen. Commentaar is een van de dingen die je programma overzichtelijk maakt.
Dit geldt niet alleen voor PHP, maar ook voor andere talen dat je altijd commentaar moet gebruiken.
Commentaar is ook belangrijk als je een probleem heb en je komt er zelf niet uit, misschien komen ze op het forum er wel uit als je commentaar erbij heb gezet??
Of als je een script post is commentaar wel zo fijn voor de lezer.
Kijk eens naar het onderstaande stuk, zie jij heel snel wat het doet?
<?php
require "settings.php";
connect();
$array = array();
$array= get_array_element();
echo $array['header'];
?>
Niet echt hè? En nu?
<?php
//Include het bestand met mysql connectie variablen en functies
require "settings.php";
//maak een database connectie met mijn zelfgemaakte functie
connect();
//maak een variable aan(niet echt nodig, maar het staat mooi)
$array = array();
// gebruik zelfgemaakte functie get_array_elements() om
// data uit de database en de tabel 'html' te verkrijgen
$array = get_array_elements();
// En nu, echo de header!
echo $array['header'];
?>
Hier zie je al een stuk sneller wat het doet hè?
Overbodig commentaar
Commentaar is goed, heel goed. Maar als er teveel van is, wordt een programma weer onoverzichtelijk. Laten we het bovenstaande programma erweer bij pakken en overbodig commentaar erbij gooien.
<?php
//Include het bestand met de site settings, settings voor de chatbox,
//settings voor het pad van de site, de url van de site, en mysql connectie vars
// en natuurlijk niet te vergeten allemaal zelfgemaakte functie (duhhh)
require "settings.php";
//maak een database connectie met mijn zelfgemaakte functie connect()
//hij connecteert standaard naar tabel 'site' in mysql
// en dat wil ik nu, want we hoeven nu ff niet naar postgresql te
//connecteren, dus we hoeven ook geen parameters op te geven!
connect();
//maak een variable aan(niet echt nodig, maar het staat mooi)
//misschien geeft hij een notice dus dat wil ik voorkomen,
// want dat staat zo raar.
$array = array();
// gebruik zelfgemaakte functie get_array_elements() om
// data uit de database en de tabel 'html' te verkrijgen
// dan kan ik die data met foreach($array as $key => $value)
// er weer uithalen, ik kan natuurlijk ook alleen echo $array['header']
// doen, dan output ie de header, maar niet alle data,
// want dat is best onhandig en me script wordt er langzaam van
$array = get_array_elements();
// En nu, echo de header!
// dan krijgen we database data die ik in me eigen zelfgemaakte
// admin cp samen met html outgeput
// <title>$obj->titel</title> staat er in de code dus dat
// bewijst dat we mysql gebruiken
echo $array['header'];
//nu is dit script klaar.
// dit includen we in index.php met
// include('$header.php');
// en dan hebben we een header!!
?>
Dit is overbodig commentaar, toegegeven, je moet wel een een of andere hansworst zijn om zo commentaar te schrijven, maar toch gebeurt het. Vergis je niet!
Dit geldt niet alleen voor PHP, maar ook voor andere talen dat je altijd commentaar moet gebruiken.
Commentaar is ook belangrijk als je een probleem heb en je komt er zelf niet uit, misschien komen ze op het forum er wel uit als je commentaar erbij heb gezet??
Of als je een script post is commentaar wel zo fijn voor de lezer.
Kijk eens naar het onderstaande stuk, zie jij heel snel wat het doet?
<?php
require "settings.php";
connect();
$array = array();
$array= get_array_element();
echo $array['header'];
?>
Niet echt hè? En nu?
<?php
//Include het bestand met mysql connectie variablen en functies
require "settings.php";
//maak een database connectie met mijn zelfgemaakte functie
connect();
//maak een variable aan(niet echt nodig, maar het staat mooi)
$array = array();
// gebruik zelfgemaakte functie get_array_elements() om
// data uit de database en de tabel 'html' te verkrijgen
$array = get_array_elements();
// En nu, echo de header!
echo $array['header'];
?>
Hier zie je al een stuk sneller wat het doet hè?
Overbodig commentaar
Commentaar is goed, heel goed. Maar als er teveel van is, wordt een programma weer onoverzichtelijk. Laten we het bovenstaande programma erweer bij pakken en overbodig commentaar erbij gooien.
<?php
//Include het bestand met de site settings, settings voor de chatbox,
//settings voor het pad van de site, de url van de site, en mysql connectie vars
// en natuurlijk niet te vergeten allemaal zelfgemaakte functie (duhhh)
require "settings.php";
//maak een database connectie met mijn zelfgemaakte functie connect()
//hij connecteert standaard naar tabel 'site' in mysql
// en dat wil ik nu, want we hoeven nu ff niet naar postgresql te
//connecteren, dus we hoeven ook geen parameters op te geven!
connect();
//maak een variable aan(niet echt nodig, maar het staat mooi)
//misschien geeft hij een notice dus dat wil ik voorkomen,
// want dat staat zo raar.
$array = array();
// gebruik zelfgemaakte functie get_array_elements() om
// data uit de database en de tabel 'html' te verkrijgen
// dan kan ik die data met foreach($array as $key => $value)
// er weer uithalen, ik kan natuurlijk ook alleen echo $array['header']
// doen, dan output ie de header, maar niet alle data,
// want dat is best onhandig en me script wordt er langzaam van
$array = get_array_elements();
// En nu, echo de header!
// dan krijgen we database data die ik in me eigen zelfgemaakte
// admin cp samen met html outgeput
// <title>$obj->titel</title> staat er in de code dus dat
// bewijst dat we mysql gebruiken
echo $array['header'];
//nu is dit script klaar.
// dit includen we in index.php met
// include('$header.php');
// en dan hebben we een header!!
?>
Dit is overbodig commentaar, toegegeven, je moet wel een een of andere hansworst zijn om zo commentaar te schrijven, maar toch gebeurt het. Vergis je niet!
Pagina 4
Eén bestand
Als je dingen zoals variablen en functies veel gebruikt op iedere pagina, is het beter om één bestand te maken voor al je variablen.
Zo bestand kan er zo uit komen te zien:
<?php
///////////////////////////////////////////////////
/// Settings.php
////////////////////
//////////////////
/// Hier staan alle gegevens en data en functies
/// voor de site in
///////////////////////////////////////////////////
///////////////////////////////////////////////
/// mysql settings
////////////////////////////////////////////
$SETTINGS['mysql']['host'] = 'localhost';
$SETTINGS['mysql']['user'] = 'ijscoman';
$SETTINGS['mysql']['pass'] = 'vriezer';
$SETTINGS['mysql']['db'] = 'catalogus';
//////////////////////////////////////////
/// site settings: url en pad
////////////////////////////////////////
$SETTINGS['site']['url'] = 'http://ijsjesman.ijspaleis.net';
$SETTINGS['site']['pad'] = "C:\apache\htdocs\ijsman";
?>
Zo zou je settings bestand eruit kunnen zien. Je kan hem dan in iedere pagina includen met
<?php
require 'settings.php';
?>
Zo heb je je variablen altijd bij de hand. Je moet dat bestand dan wel ff beveiligen hè. ;)
Zo bestand kan er zo uit komen te zien:
<?php
///////////////////////////////////////////////////
/// Settings.php
////////////////////
//////////////////
/// Hier staan alle gegevens en data en functies
/// voor de site in
///////////////////////////////////////////////////
///////////////////////////////////////////////
/// mysql settings
////////////////////////////////////////////
$SETTINGS['mysql']['host'] = 'localhost';
$SETTINGS['mysql']['user'] = 'ijscoman';
$SETTINGS['mysql']['pass'] = 'vriezer';
$SETTINGS['mysql']['db'] = 'catalogus';
//////////////////////////////////////////
/// site settings: url en pad
////////////////////////////////////////
$SETTINGS['site']['url'] = 'http://ijsjesman.ijspaleis.net';
$SETTINGS['site']['pad'] = "C:\apache\htdocs\ijsman";
?>
Zo zou je settings bestand eruit kunnen zien. Je kan hem dan in iedere pagina includen met
<?php
require 'settings.php';
?>
Zo heb je je variablen altijd bij de hand. Je moet dat bestand dan wel ff beveiligen hè. ;)
Pagina 5
Functies
Voor dingen die je veel gebruikt(bijvoorbeeld database connectie maken en weer afsluiten) zou je vaste functies kunnen maken, die je overal kan oproepen.
Laten we weer terugkijken op onze settings.php.
Stel, bijna alles op onze site werkt met mysql.
Wij willen natuurlijk op iedere pagina snel een connectie met mysql maken. Wat doen wij op iedere pagina zetten? Niet dit: <?
mysql_connect($SETTINGS['mysql']['host'], $SETTINGS['mysql']['user'], $SETTINGS['mysql']['pass']);
mysql_select_db($SETTINGS['mysql']['db']);
?>
Maar dit:
<? connect(); ?>
Nu moeten we wel een functie hebben. Open settings.php en voeg dit toe:
<?php
/// Dit zijn tijdelijke vars die gebruikt kunnen worden door functies
$temp_var1 = "";
$temp_var2 = "";
//////////////////////////////////
/// Functies defineren
////////////////////////////////
function connect($db = 'b2l1661_site') {
//////////////////////////////////////
/// Maakt connectie naar SQL database
////////////////////////////////////
/// boolean connect([string database], [string sql type]);
global $SETTINGS, $temp_var2;
switch ($sql_type) {
$temp_var2 = mysql_connect($SETTINGS['mysql']['host'], $SETTINGS['mysql']['user'], $SETTINGS['mysql']['pass']);
if (!$temp_var2) {
die ('<html><head><title>Storing</title></head><body text="white">Er is een fout opgetreden waardoor de site tijdelijk niet bereikbaar is. Mogelijk ligt de MySQL server eruit. Probeer het later nog eens. <br /> De fout: '.mysql_error().'</body></html>');
return false;
}
if (!mysql_select_db($db)) {
die ('<html><head><title>Storing</title></head><body text="white">Er is een fout opgetreden waardoor de site tijdelijk niet bereikbaar is. Mogelijk ligt de MySQL server eruit. Probeer het later nog eens. <br /> De fout: '.mysql_error().'</body></html>');
return false;
}
return true;
}
?>
Nu kunnen we heel snel connecteren naar een database!
Laten we weer terugkijken op onze settings.php.
Stel, bijna alles op onze site werkt met mysql.
Wij willen natuurlijk op iedere pagina snel een connectie met mysql maken. Wat doen wij op iedere pagina zetten? Niet dit: <?
mysql_connect($SETTINGS['mysql']['host'], $SETTINGS['mysql']['user'], $SETTINGS['mysql']['pass']);
mysql_select_db($SETTINGS['mysql']['db']);
?>
Maar dit:
<? connect(); ?>
Nu moeten we wel een functie hebben. Open settings.php en voeg dit toe:
<?php
/// Dit zijn tijdelijke vars die gebruikt kunnen worden door functies
$temp_var1 = "";
$temp_var2 = "";
//////////////////////////////////
/// Functies defineren
////////////////////////////////
function connect($db = 'b2l1661_site') {
//////////////////////////////////////
/// Maakt connectie naar SQL database
////////////////////////////////////
/// boolean connect([string database], [string sql type]);
global $SETTINGS, $temp_var2;
switch ($sql_type) {
$temp_var2 = mysql_connect($SETTINGS['mysql']['host'], $SETTINGS['mysql']['user'], $SETTINGS['mysql']['pass']);
if (!$temp_var2) {
die ('<html><head><title>Storing</title></head><body text="white">Er is een fout opgetreden waardoor de site tijdelijk niet bereikbaar is. Mogelijk ligt de MySQL server eruit. Probeer het later nog eens. <br /> De fout: '.mysql_error().'</body></html>');
return false;
}
if (!mysql_select_db($db)) {
die ('<html><head><title>Storing</title></head><body text="white">Er is een fout opgetreden waardoor de site tijdelijk niet bereikbaar is. Mogelijk ligt de MySQL server eruit. Probeer het later nog eens. <br /> De fout: '.mysql_error().'</body></html>');
return false;
}
return true;
}
?>
Nu kunnen we heel snel connecteren naar een database!
Reacties
0