Exceptions gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end React developer

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »

Lead javascript developer Node.js React

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Junior/medior Back end developer PHP, Laravel

Functie Jij als ontwikkelaar komt te werken in een team bestaande uit 4 back end programmeurs, 2 vormgevers/ Front end developers en een online marketeer. Qua persoonlijkheden is het team erg gevarieerd van sportfanaten tot gameliefhebbers en Golfers. Een ding heeft iedereen hier gemeen; Passie voor goede code. In jouw rol zul je voor veel van je tijd je bezig houden met het ontwikkelen van maatwerk features en applicaties. Daarnaast hebben wij op aanvraag ook wel eens een website of onderhoudsklusje, die opgepakt moet worden en hier ben jij ook niet vies van. Jij als full stack developer zult dus

Bekijk vacature »

Software Programmeur

Functie omschrijving Ben jij op zoek naar een organisatie waar je samen met een team werkt aan iets moois en waar je naast hard werken ook hard kunt lachen? Dan ben je hier aan het juiste adres! Voor een informeel IT-bedrijf in omgeving Wassenaar zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed

Bekijk vacature »

.NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. 50% van jullie werkzaamheden is maatwerk en de overige 50% is

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

SQL Database Ontwikkelaar

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je houdt je bezig met het ontwerp en de ontwikkeling van MS SQL server databases, dit doe je met T-SQL als programmeer laag. De begeleiding van projecten van A tot Z, je zult aansluiten bij meetings met

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Junior/Medior Front-end developer

Functie Als Front-end developer werk je intensief samen met 1 van de UX-designers en denk je mee over de gebruiksvriendelijkheid en design van onze web- en mobile apps. Je bent betrokken bij sessies met gebruikers om designs te valideren en usability van de app-in-wording te testen. Vervolgens gebruik je dit om samen met je team waarin ook back-end (.NET) developers zitten, te zorgen voor de realisatie van de best mogelijke apps voor studenten en docenten. Eisen • Je hebt een hands-on development en coding mind-set en werkt graag aan een high quality code base welke je consequent onderhouden kan worden

Bekijk vacature »

Implementatie specialist

Standplaats: Honselersdijk Aantal uren: 32 – 40 uur Opleidingsniveau: HBO werk- en denkniveau Ben jij de implementatie expert die onze klanten helpt bij het integreren van de Greencommerce software? Ben jij daarnaast communicatief sterk, denk jij graag in verbeteringen en heb je ervaring met ICT? Lees dan snel verder! Bedrijfsinformatie Jem-id is een grote speler op het gebied van software ontwikkeling. Zo zijn wij continu bezig met het ontwikkelen van de meest innovatieve software voor de AGF- en sierteeltsector. We creëren oplossingen die er toe doen en verbinden klanten niet alleen op technisch vlak, maar zoeken ook de verbinding in

Bekijk vacature »

C# developer

Functie omschrijving We are looking for a dutch native speaker Ik ben op zoek naar een back-end developer, die met name kennis & ervaring heeft van de programmeertaal C#. Jij gaat aan de slag bij een topspeler in de logistieke sector, die zich behalve met logistiek, ook bezig houdt met softwareontwikkeling. Welke taken komen hierbij kijken? Je gaat desktop- en webapplicaties onderhouden en optimaliseren, waarin je werkt met o.a. C#, ASP.NET, SQL Server en T-SQL. Je hebt regelmatig klantcontact om de wensen in kaart te brengen en te evalueren over de huidige draaiende applicaties. Je implementeert nieuwe functionaliteiten toe aan

Bekijk vacature »

Front end developer

Functie Binnen de functie van Front-end developer werk je mee aan uitdagende klantprojecten. In teamverband werk je aan de voorkant van onze state-of-the-art portaal oplossingen en apps. Dit alles gebeurt in een multidisciplinaire omgeving waarbij je de ruimte hebt om te sparren, je ideeën scherp te stellen, en waar je met de benodigde kennis en ervaring om je heen altijd terecht kunt bij je collega’s voor vragen en ondersteuning. Meestal werk je vanuit ons kantoor maar we bieden ook alle faciliteiten om thuis te kunnen werken. Voor sommige projecten ga je mee naar de klant, wellicht zelfs in het buitenland!

Bekijk vacature »

Full stack developer Python, React

Functie Jij als full stack developer komt binnen onze Technology afdeling te werken. Deze bestaat momenteel uit 15 man. De stack waarmee wij werken is voornamelijk Python, Javascript, React en GraphQL. Binnen deze afdeling wordt er met multidisciplinaire teams gewerkt aan verschillende projecten. Projecten duren vaak langer dan 3 maanden en je bent van begin tot eind vaak betrokken. Naast dat je als full stack ontwikkelaar aan de slag gaat ben je ook Consultant. Dit betekent dat je ook klantcontact hebt in je rol en werkshops geeft. De verhouding tussen deze werkzaamheden zijn ongeveer 70% development en 30% consultancy. Een

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar ontbreekt er aan passie en motivatie niks. Jij bent communicatief sterk en pakt iedere uitdaging dan ook met beide handen aan. Op projectbasis ga jij met je team of met enkele andere ontwikkelaars intern aan de slag bij diverse partners. Op basis van het project ga jij aan de slag en zijn de werkzaamheden en technieken erg divers. Jouw werkgever stelt jouw ontwikkeling hierin voorop, zo krijg je een vast vertrouwenspersoon die één keer in de maand op locatie van jouw project zal kijken hoe het gaat en of er eventuele aandachtspunten zijn. Daarnaast krijg

Bekijk vacature »
Thijs X

Thijs X

31/12/2007 16:18:00
Quote Anchor link
Hallo allemaal,

Weer een vraagje over het gebruik van Exceptions, doe het nu alvolgt?
Is het niet overbodig om van elke publieke methode ( functie ) alle invoer te controleren dmv Exceptions?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    public function __construct( $sTitel ) {
           try {
             if( empty($sTitel) || !is_string($sTitel) ) {
                 throw new Exception( 'Niet alle parameters zijn correct ingevuld' );
             }

            $this->sTitel = $sTitel;
           }

               catch( Exception $e ) {
                   die( $e->getMessage() );
              }
         }

?>
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
PHP hulp

PHP hulp

10/05/2024 14:36:16
 
- -

- -

31/12/2007 16:21:00
Quote Anchor link
Volgens mij is het zo prima. Alleen vraag ik me af of die() zo'n goed idee is; exceptions zijn juist zodat je geen die() of exit meer hoeft te gebruiken.
Edit:
Niet goed gekeken.

Volgens mij hoort het zo:
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
<?php
    class Test
    {
        public function __construct($sNaam)
        {

            if (empty($sNaam) || !is_string($sNaam))
            {

                throw new Exception('Parameters zijn onjuist.');
            }

            // doe je ding
        }
    }

    
    try
    {
        $oTest = new Test(123);
        // doe je ding met $oTest
    }
    catch (Exception $e)
    {

        echo '<p class="error"><strong>Error:</strong><br />' . $e->getMessage . '</p>';
    }

?>
Gewijzigd op 01/01/1970 01:00:00 door - -
 
Thijs X

Thijs X

31/12/2007 16:23:00
Quote Anchor link
Ja ben bezig met een Formulier klasse, en heb de die() wel nodig anders word het formulier alsnog half geprint met de onderdelen die wel goed zijn ingvuld.
 
Jelmer -

Jelmer -

31/12/2007 16:25:00
Quote Anchor link
mag je zelf weten. In sommige situaties is het handig omdat anderen gebruik maken van jouw klassen, en zo gedetailleerde foutmeldingen kunnen ontvangen. Sommigen gebruiken deze controle om meteen de invoer van bijvoorbeeld formulieren te controleren. Sommigen houden van de extra zekerheid die het met zich mee brengt. En sommigen doen het gewoon niet.

Maar het maakt debuggen van (anders niet gevonden fouten) echt zoveel sneller, dat ik het toch erg sterk kan aanraden.
 
Thijs X

Thijs X

31/12/2007 16:45:00
Quote Anchor link
Bedankt voor julllie reacties, ik ga de fouthandeling wel in de classe zelf verwerken omdat het idd ook voor andere mensen makkelijk bruikbaar moet zijn. Als hij af is post ik hem misschien hie rwel op PHPhulp
 
Jelmer -

Jelmer -

31/12/2007 16:55:00
Quote Anchor link
De fout-opmerking in de klasse zelf. Het afhandelen (een alternatieve route verzinnen, die() is daar (niet?) een van) is niet de taak van je klasse over het algemeen. Dus alleen throw. Catch hoef je binnen een klasse zelden te gebruiken. Tenzij je natuurlijk een fout op dat moment kan afhandelen, dus een alternatief kan bieden.
 
Thijs X

Thijs X

31/12/2007 17:01:00
Quote Anchor link
Maar als ik een formulie wil gaan aanmaken met mn klasse en ik vul verkeerde parameters in, dan wil ik natuurlijk niet dat het formulier wel word weergegeven, dan wil ik een nette error.
 
Jelmer -

Jelmer -

31/12/2007 17:04:00
Quote Anchor link
Jep, dus op die plek waar je die fout gaat weergeven, of beter gezegd, de exception verwacht en omzet naar een bericht, daar pas komt het catch-statement.

Of simpeler gezegd: op de plek waar je het meeste op kan vangen en toch nog wat nuttigs er mee kan doen, en dus uiteindelijk het minste try-blokken (het mooiste is natuurlijk om maar 1 enkel try-blok nodig te hebben) nodig hebt.
 
Thijs X

Thijs X

31/12/2007 17:07:00
Quote Anchor link
Hmm dus beste manier om wel de exceptions te throwen in mn klasse,
maar pas een try/catch te gebruiken als ik een nieuw formulier aanmaak?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
try {
$form = new Formulier();
$form->doedit();
$form->doedat();
}

catch( Exception $e ) {
// error
}
?>
 
Jelmer -

Jelmer -

31/12/2007 17:18:00
Quote Anchor link
Je hebt verschillende soorten exceptions. Je hebt bijvoorbeeld de InvalidArgumentException en de BadMethodCallException. Dezen zou ik bijvoorbeeld niet opvangen in je catch-blok in je formulier-generator, want je formulier weet daar geen raad mee.

Echter, als je het hebt over een formulier genereren, dan neem ik aan dat je er ook een soort van controle inbakt die de opgestuurde waarden controleert. De vraag is, wil je hier wel exceptions voor gebruiken? Het lijkt mij handiger om hier gewoon boolean waarden voor te gebruiken bij de controle ($this->field->isValid($waarde)) en om eerlijk te zijn kan ik zo ook niet een situatie bedenken waarin je werkelijk een try/catch-blok nodig zal hebben in je formulier-klasse zelf.
 
Andreas Warnaar

Andreas Warnaar

06/05/2008 19:24:00
Quote Anchor link
@Jelmer..
Als ik het goed begrijp dan gebruik je dus geen exceptions in een klasse?

Ik gebruik nu catch in mijn construtor bij het aan maken van een object.. is dat wel volgens de regels of moet ik deze catch pas toepassen als ik het alle objecten aan maak?

Hopelijk snap je een beetje wat ik bedoel..
Onderstaande code is van mijn lijst klassen die een ftp object aan maakt..

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
<?php
    function __construct($p_SubDir=''){
        try{
            if ($this->m_SourceType == 'ftp'){
                if(!empty($this->m_FtpHost) AND !empty($this->m_FtpUserName) AND !empty($this->m_FtpUserPass)){
                    $this->obj_FTP = new clsFtp($this->m_FtpHost,$this->m_FtpUserName,$this->m_FtpUserPass);
                    if(!empty($p_SubDir) AND $p_SubDir != '' ){
                        $this->obj_FTP->setCurrentDir($this->m_FtpDocRoot . $p_SubDir);
                    }
else{
                        $this->obj_FTP->setCurrentDir($this->m_FtpDocRoot);
                    }
                }
else{
                    throw new constructException('Ftp hostname or credentials are missing');
                }
            }
elseif($this->m_SourceType == 'http' ){
            return $this->m_HttpRootPath;
        }
else{
            throw new constructException('No Source type has been set!');
        }
        }
catch (constructException $e){
            print $e->Report();
            exit;
        }
    }
// End fucntion __construct()
?>
Gewijzigd op 01/01/1970 01:00:00 door Andreas Warnaar
 
Jelmer -

Jelmer -

08/05/2008 00:15:00
Quote Anchor link
Zoals ik waarschijnlijk al eerder hier heb gepost: vang een exception pas op wanneer je een alternatieve route voor de flow van je programma kan bieden.

Stel dat je een (stel) klasse hebt die data beheert met behulp van een database die hij zelf onderhoudt. Nu wil je een klompje data opslaan, en de klasse probeert een insert uit te voeren. Dus je past een eigenschap aan, en roept indirect __set aan. __set roept een updateDatabase-method aan. Bummer! Tabel bestaat niet, en er wordt een exception gegooid door PDO. updateDatabase kan niets met die exception, want updateDatabase is slechts verantwoordelijk voor het bijwerken van de database, niet voor het aanmaken. __set weet echter wel raad met het probleem, en vangt de exception op - in dit geval de PDOException - en roept de createDatabase method aan, waarna hij alsnog de updateDatabase method een keer probeert. Stel nu dat je __set een array meegeeft terwijl je property een string als type verwacht. __set bemoeit zich daar vandaag niet zo mee, updateDatabase controleert daar wel op en gooit een InvalidArgumentException. Tja, __set weet niet wat hij met zo'n exception moet. PDOExceptions kan hij deels goed afhandelen, maar deze weet hij geen raadt mee en vangt hij dus ook niet op.

Moraal van het verhaal: Exceptions vang je pas op wanneer je een alternatief hebt. Anders laat je ze verder vallen.


Dus, in jouw code zet je wel de throw, maar niet de catch. print $e->report & exit zijn niet een alternatief - het is niet aan de klasse om foutmeldingen te printen of de applicatie te stoppen, dat is aan de applicatie zelf. Klassen zijn niets meer dan een hulpmiddel en moeten zich niet met andere zaken bemoeien. Dus je zet je try-catch statement om het aanmaken van de instantie heen, en niet binnen de constructor.

Verder vind ik de eigen exception niet zo netjes. constructException zegt niets over de oorzaak van het probleem, maar alleen waar het probleem is opgetreden. Dat kan je ook wel zien aan de getLine() en getFile() methods van de exception. Je hebt daar echter niet veel aan bij het opvangen. Uit mijn vorige voorbeeld: een updateDatabaseException die gegooid is omdat de database niet bereikbaar is is toch degelijk anders dan een updateDatabaseException omdat de up te daten data niet geldig is. Voor beiden is een andere oplossing, dus voor beiden kan je een ander catch-blok gebruiken. Maar een catch-blok maakt onderscheidt tussen exceptions op basis van hun klasse, en die is hetzelfde. Dus moet je in je catch-blok nu op iets anders gaan controleren.

Probeer je in eerste instantie te beperken tot de exceptions die SPL meebrengt: http://devzone.zend.com/article/2565-The-Standard-PHP-Library-SPL#table1. Ik heb zelden een eigen exception nodig, bijna alle mogelijke "fouten" zijn op te delen in deze 6 exceptions.

Overigens, in je constructor doe je iets op basis van de eigenschap m_SourceType**, alsof hij voordat __construct aangeroepen wordt handmatig geset kan worden. Wel, helaas, bij mijn weten wordt zodra je een object aanmaakt als eerst de constructor aangeroepen, met uitzonderen van FETCH_OBJ i.c.m. PDO. Hetzelfde voor de username & password. Ow, en return in een constructor heeft geen zin, de constructor zal altijd de instantie zelf teruggeven. Tenzij je hem natuurlijk als static method aanroept, maar dan krijg je weer gezeur over dat $this niet bestaat.

** Waarom ingodsnaam die m_ ervoor, als er $this-> voor staat is het toch hoe dan ook een member-variabele, domme Hongaarse notatie...
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Andreas Warnaar

Andreas Warnaar

14/05/2008 20:36:00
Quote Anchor link
-
Gewijzigd op 01/01/1970 01:00:00 door Andreas Warnaar
 
Andreas Warnaar

Andreas Warnaar

17/05/2008 19:44:00
Quote Anchor link
-
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.