abonnement Unibet Coolblue Bitvavo
pi_136897905
quote:
0s.gif Op woensdag 19 februari 2014 17:12 schreef ManianMan het volgende:

Ik ben pas begonnen met PHP, heb eerst een hele website gebouwd maar ben nu dus bezig met het echte werk. Ik ben dus nog in de leerfase. Als ik niet weet wat er fout kan zijn, dan kan ik uren de codes bewerken. ;)

...Daarom moet je leren debuggen. En niet bij de eerste de beste undefined index je complete code ergens op een forum dumpen en wachten tot iemand zich hard genoeg verveelt om een spatie voor je eruit te vissen.
pi_136897921
quote:
0s.gif Op woensdag 19 februari 2014 17:14 schreef zoem het volgende:

[..]

Tip 1: Gebruik indenting zodat je code leesbaar en onderhoudbaar is!
Tip 2: Gebruik var_dump() om te controleren wat de inhoud van een variabele is. Echo is daar niet geschikt voor.
Tip 3: Html-forms ondersteunen array data via name="naam[sleutel]", zodat je niet naam_nummer hoeft te doen.
Tip 4: Valideer de user data ($_POST), al kan ik me voorstellen dat dat voor nu niet je belangrijkste punt is.

Endif/endfor zou ik niet in pure php-code gebruiken, tenzij indenting onhandig wordt (o.a. templates). Is geheel persoonlijke voorkeur, maar wel common practice in php.
Dank je wel voor de tips :), ik ga ze direct in gebruik nemen oftewel via trial & error maar het ging mij eigenlijk om dat mijn vriendin die opgenomen is in het ziekenhuis te Rotterdam en haar vader die bij haar is dit kunnen gebruiken om yahtzee te spelen. :D
pi_136900839
quote:
14s.gif Op dinsdag 18 februari 2014 22:03 schreef KomtTijd... het volgende:
doe eens print_r($form->data)
Als ik die andere testcode vervang door deze krijg ik:

quote:
Array ( [chronoform] => keuze_form [event] => submit [Itemid] => 108 [option] => com_content [view] => article [id] => 4 [input_text_12] => Naam [input_text_13] => straat [input_text_14] => adres [input_text_15] => 0612345678 [input_text_16] => @hotmail.com [input_radio_17] => optieA [chrono_verification] => NSmDa [input_submit_18] => Submit [9bb14d3f9a07a586dbbbb6be7abe30e5] => 1 [IPADDRESS] => 77.164.90.163 )
Het formulier wordt evengoed succesvol verzonden.
pi_136902179
quote:
5s.gif Op woensdag 19 februari 2014 19:01 schreef karton2 het volgende:

[..]

Als ik die andere testcode vervang door deze krijg ik:

[..]

Het formulier wordt evengoed succesvol verzonden.
Ik zie anders niks aan radioboxes wat een array moet zijn.

Waarschijnlijk knalt hij er al uit met
1
2
3
4
5
<?php
if ( !isset($form->data['radioboxes']) || count($form->data['radioboxes']) == ) {
  return;
}
?>

aangezien die data niet bestaat.
pi_136902190
quote:
0s.gif Op woensdag 19 februari 2014 17:20 schreef ManianMan het volgende:

[..]

Dank je wel voor de tips :), ik ga ze direct in gebruik nemen oftewel via trial & error maar het ging mij eigenlijk om dat mijn vriendin die opgenomen is in het ziekenhuis te Rotterdam en haar vader die bij haar is dit kunnen gebruiken om yahtzee te spelen. :D
Vraagje, staat deze opdracht letterlijk zo in het boek beschreven?
pi_136903059
...geen array 'radioboxes' dus, back to the drawingboard
pi_136903639
quote:
0s.gif Op woensdag 19 februari 2014 19:37 schreef totalvamp het volgende:

[..]

Vraagje, staat deze opdracht letterlijk zo in het boek beschreven?
Ik heb het overgetypt dus ja
pi_136903931
quote:
1s.gif Op woensdag 19 februari 2014 20:07 schreef ManianMan het volgende:

[..]

Ik heb het overgetypt dus ja
Verbranden of terugbrengen. Dit is bagger zoals eerder verteld..

Ik snap niet dat zulke dingen nog beschreven worden in boeken met php 5+

Zo leer jij het verkeerd aan en verdient iemand die niet weet wat hij doet, geld aan een slecht boek.
pi_136903933
quote:
0s.gif Op woensdag 19 februari 2014 19:36 schreef totalvamp het volgende:

[..]

Ik zie anders niks aan radioboxes wat een array moet zijn.

Waarschijnlijk knalt hij er al uit met
[ code verwijderd ]

aangezien die data niet bestaat.
Kan je dat uitleggen in wat begrijpelijker taal?

Hardop gedacht geschreven:
Wat ik begrijp is dat een array een soort map is waar je informatie in kan opslaan.
Als ik dit voorbeeld zie:
1
2
3
4
<?php
 $cars
=array("Volvo","BMW","Toyota");
 echo 
"I like " $cars[0] . ", " $cars[1] . " and " $cars[2] . ".";
 
?>
Dan heet de array (de map dus) "$cars" en de informatie die in die array is opgeslagen: Volvo, BMW en Toyota.
Echo kan je op het scherm weergeven wat je in de array hebt staan.?

In mijn code zie ik die array weer terugkomen met de naam "$files_array", met daarin de link naar twee .pdf bestanden.
Paar regels verder bij "foreach" komt "$files_array" weer terug waarin de twee opties van de radioboxes staan beschreven: $k en $v.
Bij "if" staat dat als $k is gekozen dan moet hij de data uit de radiobox verwerken; hetzelfde geldt voor $v.
Hoe weet hij dan eigenlijk dat $k pdf01 is en en $v bij pdf02..?
Ik probeer het gewoon te begrijpen, maar het lukt niet echt :')

In ieder geval voor het gemak de php code toegevoegd.
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
pi_136904020
quote:
5s.gif Op woensdag 19 februari 2014 20:14 schreef karton2 het volgende:

[..]

Kan je dat uitleggen in wat begrijpelijker taal?

Hardop gedacht geschreven:
Wat ik begrijp is dat een array een soort map is waar je informatie in kan opslaan.
Als ik dit voorbeeld zie:
[ code verwijderd ]

Dan heet de array (de map dus) "$cars" en de informatie die in die array is opgeslagen: Volvo, BMW en Toyota.
Echo kan je op het scherm weergeven wat je in de array hebt staan.?

In mijn code zie ik die array weer terugkomen met de naam "$files_array", met daarin de link naar twee .pdf bestanden.
Paar regels verder bij "foreach" komt "$files_array" weer terug waarin de twee opties van de radioboxes staan beschreven: $k en $v.
Bij "if" staat dat als $k is gekozen dan moet hij de data uit de radiobox verwerken; hetzelfde geldt voor $v.
Hoe weet hij dan eigenlijk dat $k pdf01 is en en $v bij pdf02..?
Ik probeer het gewoon te begrijpen, maar het lukt niet echt :')

In ieder geval voor het gemak de php code toegevoegd.
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Ik heb deze gekregen van mijn broer maar welk boek raad je dan aan?
pi_136904168
quote:
1s.gif Op woensdag 19 februari 2014 20:16 schreef ManianMan het volgende:

[..]

Ik heb deze gekregen van mijn broer maar welk boek raad je dan aan?
Ik lees zelf geen PHP boeken, vooral omdat als het boek uitkomt sommige technieken alweer verouderd zijn.

Wat je moet gaan leren is denken in Classes en Objecten en op voorhand bepalen wat je nodig hebt.
Ik zou dus een tutorial opzoeken over hoe je een class maakt en deze gebruikt.
pi_136905222
quote:
5s.gif Op woensdag 19 februari 2014 20:14 schreef karton2 het volgende:

[..]

Kan je dat uitleggen in wat begrijpelijker taal?

Hardop gedacht geschreven:
Wat ik begrijp is dat een array een soort map is waar je informatie in kan opslaan.
Als ik dit voorbeeld zie:
[ code verwijderd ]

Dan heet de array (de map dus) "$cars" en de informatie die in die array is opgeslagen: Volvo, BMW en Toyota.
Echo kan je op het scherm weergeven wat je in de array hebt staan.?

In mijn code zie ik die array weer terugkomen met de naam "$files_array", met daarin de link naar twee .pdf bestanden.
Paar regels verder bij "foreach" komt "$files_array" weer terug waarin de twee opties van de radioboxes staan beschreven: $k en $v.
Bij "if" staat dat als $k is gekozen dan moet hij de data uit de radiobox verwerken; hetzelfde geldt voor $v.
Hoe weet hij dan eigenlijk dat $k pdf01 is en en $v bij pdf02..?
Ik probeer het gewoon te begrijpen, maar het lukt niet echt :')

In ieder geval voor het gemak de php code toegevoegd.
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Hoe kan ik dit makkelijk uitleggen :P

Zie een array als een lijst van dingen. Elk ding kan een naam hebben.
1
2
3
4
5
6
7
8
9
10
<?php
// Deze array bevat geen keys
$cars = ['Audi''Opel'];

//Deze wel
$car = [
'merk' => 'Audi'
'model' => 'a8'
];
?>

In het onderste voorbeeld heb je dus een array waarbij je de keys zelf hebt neergezet.

Als je nu het volgende zou doen met deze arrays:
1
2
3
4
5
6
7
8
9
10
11
<?php

foreach($cars as $key => $brand) {
   echo 
$key// Dit zal 0 en 1 zijn
   
echo $brand// Audi, Opel
}

foreach(
$car as $k => $v) {
   echo 
$k// Merk, Model
   
echo $v// Audi, a8
}

Wat foreach doet is dus over alle waarden in een array lopen en daarvan de key(ookwel index genoemd) en de waarde doorgeven.

Als je zelf geen keys meegeeft zal hij altijd bij 0 beginnen en dan optellend.

[ Bericht 0% gewijzigd door #ANONIEM op 19-02-2014 20:43:11 ]
pi_136906563
quote:
0s.gif Op woensdag 19 februari 2014 20:20 schreef totalvamp het volgende:
Ik lees zelf geen PHP boeken, vooral omdat als het boek uitkomt sommige technieken alweer verouderd zijn.

Wat je moet gaan leren is denken in Classes en Objecten en op voorhand bepalen wat je nodig hebt.
Ik zou dus een tutorial opzoeken over hoe je een class maakt en deze gebruikt.
Ik deel deze mening volledig :Y
Boeken zijn leuk voor op je plank. Maar echt nuttig zijn ze niet voor programmeertalen. 't gaat meer om het begrip dan "monkey see monkey do" dingen overnemen uit een boek. Iets wat prima (en zelfs beter) aan te leren is met tutorials en wat gericht zoeken.

Als je eenmaal wat basis kennis hebt kan je daarna jezelf de rest aanleren met behulp van de beste vriend die een programmeur heeft, google. Eventueel kan je in een later stadium wat literatuur doornemen van specifieke onderwerpen (patterns / structures / etc), maar voor het leren programmeren ansich, nah. niet nodig. (Al kan je wel beter zo snel mogelijk een fatsoenlijke uitleg voor bijv OOP zoeken, want daar blijven veel php-programmeurs prutsers op falen)

[ Bericht 5% gewijzigd door #ANONIEM op 19-02-2014 21:06:12 ]
  Moderator / Redactie Sport / Devops woensdag 19 februari 2014 @ 21:12:45 #74
176766 zoem
zoemt
pi_136907080
Het werken met een degelijk framework (Zend Framework, Symfony, etc) helpt ook om grip te krijgen op de werking en gedachte achter OOP-structuren. Echter moet je dan wel al wat basiskennis bezitten. Iets maken is uiteindelijk de beste leerschool.
pi_136907230
quote:
0s.gif Op woensdag 19 februari 2014 21:12 schreef zoem het volgende:
Het werken met een degelijk framework (Zend Framework, Symfony, etc) helpt ook om grip te krijgen op de werking en gedachte achter OOP-structuren. Echter moet je dan wel al wat basiskennis bezitten. Iets maken is uiteindelijk de beste leerschool.
Een framework is handig inderdaad, ik zou het alleen niet bij 1 laten.
  woensdag 19 februari 2014 @ 21:18:39 #76
63192 ursel
"Het Is Hier Fantastisch!
pi_136907364
conferences, gebruikersgroepen bezoeken en webinars volgen om te zien waar technieken heen gaan vandaag de dag. :Y
pi_136908516
quote:
0s.gif Op woensdag 19 februari 2014 21:12 schreef zoem het volgende:
Het werken met een degelijk framework (Zend Framework, Symfony, etc) helpt ook om grip te krijgen op de werking en gedachte achter OOP-structuren. Echter moet je dan wel al wat basiskennis bezitten. Iets maken is uiteindelijk de beste leerschool.
quote:
0s.gif Op woensdag 19 februari 2014 21:15 schreef totalvamp het volgende:

[..]

Een framework is handig inderdaad, ik zou het alleen niet bij 1 laten.
quote:
0s.gif Op woensdag 19 februari 2014 21:18 schreef ursel het volgende:
conferences, gebruikersgroepen bezoeken en webinars volgen om te zien waar technieken heen gaan vandaag de dag. :Y
Helemaal mee eens, maar als je nog niet weet wat een array is, heb je nog wel een héééééééle lange weg te gaan voordat je je in ditsoort dingen wilt gaan verdiepen.
pi_136916348
quote:
0s.gif Op woensdag 19 februari 2014 20:42 schreef totalvamp het volgende:

[..]
<knip>
Dankzij jouw uitleg snap mijn code nu wat beter, dankjewel!

Ik heb een debugger in het form gezet en ik krijg het volgende:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Data Array:
Array
(
    [option] => com_chronoforms
    [tmpl] => component
    [chronoform] => inschrijf_form
    [event] => submit
    [Itemid] => 
    [input_text_12] => naam
    [input_text_13] => straat
    [input_text_14] => postcode / plaats
    [input_text_15] => tel
    [input_text_16] => email
    [input_radio_17] => radiobox keuze
    [chrono_verification] => AE3zY
    [input_submit_18] => Submit
    [a65f6c919aedc844149f022974440e8d] => 1
)

Validation Errors:
Array
(
)

Ik kan twee keuzes maken bij de radiobox. Welke keuze ik ook maak, de debugger geeft altijd [input_radio_17] aan. (trial & error :') !)
Je tip via DM (het niet bestaan van $form->data['radioboxes']) heeft mij doen beseffen dat ik in de PHP een verwijzing moet hebben naar die [input_radio_17] en naar de naam van het formulier.
De naam van het formulier is: inschrijf_form

De PHP mét inschrijf_form en input_radio_17:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if ( !isset($inschrijf_form->data['input_radio_17']) || count($inschrijf_form->data['input_radio_17']) == ) {
  return;
}
$files_array = array (
    
    
=>    JPATH_SITE.'http://www.etcetera.pdf',
    
=>     JPATH_SITE.'http://www.etcetera.pdf',
);
$attach_files = array();
foreach ( 
$files_array as $k => $v ) {
  if ( 
in_array($k$inschrijf_form->data['input_radio_17']) ) {
    
$attach_files[] = $v;
  }
}
$inschrijf_form->data['file_array'] = $attach_files;

print_r($_POST)
?>

Het formulier verstuurt nog steeds geen PDF naar de gebruiker.
Mijn vraag is echter of het formulier en de PHP in theorie zou moeten werken.
Zo ja; dan weet ik dat de code klopt en dat ik verder zoeken naar een instelling die ik over het hoofd zie.
  Moderator / Redactie Sport / Devops donderdag 20 februari 2014 @ 00:38:08 #79
176766 zoem
zoemt
pi_136916713
Even los van de bijlage, wordt er uberhaupt wel een mail gestuurd na het submitten van het formulier? Als dat al niet werkt ligt het probleem niet bij de bijlage.

Even door de chronoforms library gebladerd, maar wat is dat anno 2014 slechte code zeg...
pi_136916783
quote:
0s.gif Op donderdag 20 februari 2014 00:38 schreef zoem het volgende:
Even los van de bijlage, wordt er uberhaupt wel een mail gestuurd na het submitten van het formulier? Als dat al niet werkt ligt het probleem niet bij de bijlage.
Ja, de admin ontvangt een email met daarin de ingevulde gegevens.
  Moderator / Redactie Sport / Devops donderdag 20 februari 2014 @ 00:55:51 #81
176766 zoem
zoemt
pi_136916994
De vraag is nu waar het fout gaat. Komen de formuliergegevens juist door? Zo ja, gaat het verwerken ervan goed? Indien ja, via welke code wordt de emailinhoud samengesteld en hoe wordt het verzonden? Je zult stap voor stap steeds een stukje dieper de code in moeten duiken door functie-aanroepen te volgen tot het punt waar je de fout tegenkomt. Soms heb je het zo gevonden, maar soms kun je ook úren bezig zijn om een klein foutje eruit te vissen. Goed kunnen debuggen is een kunst op zich :)
pi_136920014
quote:
5s.gif Op donderdag 20 februari 2014 00:18 schreef karton2 het volgende:


De PHP mét inschrijf_form en input_radio_17:
[ code verwijderd ]

Het formulier verstuurt nog steeds geen PDF naar de gebruiker.
Mijn vraag is echter of het formulier en de PHP in theorie zou moeten werken.
Zo ja; dan weet ik dat de code klopt en dat ik verder zoeken naar een instelling die ik over het hoofd zie.
Probeer eerst eens terug begrijpen wat je code precies doet voordat je random dingen gaat aanpassen. wat je nu hebt staan slaat namelijk helemaal nergens op.

Zoek eens op php.net op wat de gebruikte functies en loops doen. Zorg dat je helder hebt wat er in de variabelen staat die je gebruikt. Op deze manier met hagel schieten brengt je nergens.
  donderdag 20 februari 2014 @ 09:48:48 #83
25889 Sitethief
Fulltime Flapdrol
pi_136920606
Ik had een vraagje over Exceptions, ik ben nu bezig mezelf aan te leren om die vaker te gebruiken ipv steed false terug te geven als er iets mis gaat. Ik stuur nu veel exceptions terug naar de plek van aanroep door verschillende functies heen, alleen ik heb nu het idee dat het eigenlijk niet de beste manier is zoal ik dat nu doe. Volgens mij kan ik namelijk ook alle exceptions in 1 try catch doorsturen. Maar ook vraag ik me af of dit wel nodig is, omdat de class aanroep zelf ook al in een try catch zit. Het wordt anders wel een hele lang lijst met try catch...
Zie deze code:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/**
     * Bouw generieke generator op met eventuele extra data uit child classes
     * 
     * Voorbeeld voor de options
     * $options = array(
     *                  'allTpls'           =>  'getAllFormTpls',
     *                  'listTpl'           =>  '/generator/listTemplates',
     *                  'elementTpl'        =>  '/generator/element',
     *                  'generatorTpl'      =>  '/generator/generator',
     *                  'modifyTpl'         =>  '/generator/modify',
     *                  'configurationTpl'  =>  '/generator/configuration',
     *   );
     * 
     * @param string $type Generator type, bijv. report, form. Zal bijv. worden gebruikt in de benanimg van id's in html etc
     * @param array $options array met opties, zie hierboven voor alle mogelijk onderdelen
     * @throws \library\generator\Exception    Rethrows alle exceptions
     * @return void
     */
    
public function __construct($type$options) {
        
parent::__construct($this->dbOptions);          //bouw db in de OMS parent class op
        
try {
            
$this->setOptions($options);                //set $this->options
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        
$this->setObjects($this->dbOptions);            //haal alle toegankelijke objecteninformatie op dmv een functie in de ixPlanta class
        
$this->secure = new Secure();                   //instantieer de secure class
        
try {
            
$this->setType($type);                      //set $this->type
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        try {                                           
//set $this->company  
            
$this->setCompany(true);                    //@TODO ondersteuning voor meerdere companies inbouwen?  
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        
$this->setProject();                            //set project en projectDbName gebaseerd op de IXPLATTFORM constante
        
$this->setDesign();                             //set design doc gebaseerd op de IXPLATTFORM constante
        
try {
            
$this->setViews();                          //set $this->views met alle views uit $this->options
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        try {
            
$this->setTemplates();                      //set $this->templates met alle templates uit $this->options
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        try {
            
$this->setChunkTplChunks();                 //set $this->chunktpl met alle templates uit $this->templates
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}
        try {
            
$this->setUserGroupNames();                 //set $this->userGroupNames
        
} catch (Exception $exc) {
            throw 
$exc//rethrow
        
}        
    }

    public function 
setType($type){
        if (isset(
$type) && is_string($type)) {
            
$this->type $type;                        //set type
        
} else {
            throw new \
Exception('Invalid type');
        }
    }
?>
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
  donderdag 20 februari 2014 @ 10:07:46 #84
25889 Sitethief
Fulltime Flapdrol
pi_136920995
Hmm, ik heb ze nu gewoon verwijderd, las net ergens dit:
quote:
You should not be catching the exception unless you intend to do something meaningful.
En dat is nu niet het geval.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_136925569
Wat je hebt gedaan is goed. In je testsuite zie je vanzelf dat het doodgaat als de onderliggende meuk dood gaat. Tenzij je iets doet als:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
try { 
   
ga_dood();

catch (
Exception $e) { 
    
# Ik weet dat ik doodga, maar het boeit niet, tenzij ik foutmelding X krijg
    
if ($e->getMessage() == "Nu moet je wel doodgaan") { 
        throw(
$e);
    }
}

# life is like a box of chocolates
?>

Wat ik vaak doe is dat ik ga kijken of de situatie goed is om iets te doen, meestal assert ik dan de opties en ga ik ook dood als het fout gaat.

Dus als $this->set_company($company); doodgaat omdat company undef is:

Dan zorg ik ervoor dat 1) de param niet undef kan zijn en dat m'n caller er gelijk uitklapt en $company bijvoorbeeld bepaalde waarde is controleer ik vooraf of die waarde wel correct is en dat doen we dan met bijvoorbeeld een constante. En dan kan je door je gehele applicatie dat checken en mogelijk Exceptions throwen.

[ Bericht 14% gewijzigd door slacker_nl op 20-02-2014 12:58:32 ]
In theory there is no difference between theory and practice. In practice there is.
pi_136928219
quote:
0s.gif Op donderdag 20 februari 2014 10:07 schreef Sitethief het volgende:
Hmm, ik heb ze nu gewoon verwijderd, las net ergens dit:

[..]

En dat is nu niet het geval.
Ik las heel jouw post en dacht ik ga posten erop, tot ik deze post las :P

Met elke functie die een actie doet met gevolgen, zorg je ervoor dat je een return false hebt bijvoorbeeld.
Exceptions maak je eigenlijk zelden gebruik van, Alleen als je wilt dat je script ermee stop op het moment van de exceptie (meestal een fatal error)
pi_136954297
quote:
0s.gif Op donderdag 20 februari 2014 10:07 schreef Sitethief het volgende:
Hmm, ik heb ze nu gewoon verwijderd, las net ergens dit:

[..]

En dat is nu niet het geval.
De belangrijkste regels voor het werken met excepties zijn:
1. Gebruik excepties alleen voor exceptionele situaties.
2. Gooi nooit Exception (maar bijvoorbeeld een InvalidArgumentException)
3. Vang altijd Exception, niet alleen het specifieke type dat wordt gegooid

Dus als je bijvoorbeeld user input aan het controleren bent, moet je geen excepties gooien. Het is (in mijn ogen) verwacht gedrag dat die input niet voldoet aan de eisen die je eraan stelt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/**
 * @param string $type
 *
 * @throws \InvalidArgumentException
 */
public function setType($type)
{
    if (!
is_string($type) {
        throw new \
InvalidArgumentException('$type must be a string');
    }

    
$this->type $type;
}
?>

Docblocks zijn heel handig om aan te geven wat een functie doet, welke argumenten er worden verwacht, welk type er teruggegeven wordt en wat er aan excepties kan worden verwacht. Je kunt er uiteraard ook bijzetten wat een functie doet.
pi_136954564
quote:
0s.gif Op donderdag 20 februari 2014 12:51 schreef slacker_nl het volgende:

Wat ik vaak doe is dat ik ga kijken of de situatie goed is om iets te doen, meestal assert ik dan de opties en ga ik ook dood als het fout gaat.

Dus als $this->set_company($company); doodgaat omdat company undef is:

Dan zorg ik ervoor dat 1) de param niet undef kan zijn en dat m'n caller er gelijk uitklapt en $company bijvoorbeeld bepaalde waarde is controleer ik vooraf of die waarde wel correct is en dat doen we dan met bijvoorbeeld een constante. En dan kan je door je gehele applicatie dat checken en mogelijk Exceptions throwen.
Asserts hebben het nadeel dat ze uitgezet kunnen worden. Ik kan dus instellen dat ze bij mij niet afgaan, waardoor ik niet gewaarschuwd wordt voor ongeldige waardes. Om die reden vind ik asserts eigenlijk geen geschikte optie voor public API, en wel voor private en protected functies.
  vrijdag 21 februari 2014 @ 09:39:54 #90
25889 Sitethief
Fulltime Flapdrol
pi_136963806
quote:
0s.gif Op donderdag 20 februari 2014 23:04 schreef Light het volgende:

[..]

De belangrijkste regels voor het werken met excepties zijn:
1. Gebruik excepties alleen voor exceptionele situaties.
2. Gooi nooit Exception (maar bijvoorbeeld een InvalidArgumentException)
3. Vang altijd Exception, niet alleen het specifieke type dat wordt gegooid

Dus als je bijvoorbeeld user input aan het controleren bent, moet je geen excepties gooien. Het is (in mijn ogen) verwacht gedrag dat die input niet voldoet aan de eisen die je eraan stelt.
[ code verwijderd ]

Docblocks zijn heel handig om aan te geven wat een functie doet, welke argumenten er worden verwacht, welk type er teruggegeven wordt en wat er aan excepties kan worden verwacht. Je kunt er uiteraard ook bijzetten wat een functie doet.
Alleen zijn al die dingen geen userinput maar input van classes die op deze class bouwen, die dus een generator willen opbouwen met hun instellingen, dus bijv. een class van mijn collega gebouwd.

(Even kort antwoord, bedankt voor de tips van allebei de posters)
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')