Exceptions gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dynamics Ontwikkelaar

Dit ga je doen Ontwikkelen van Dynamics 365 voor de interne uitrol; Samen met de consultants sparren met klanten over de wensen en eisen; Ontwikkelen van Dynamics 365 voor verschillende grote klanten; Technische analyse en testen; Meedenken over het gebruik en de richting van Dynamics binnen de organisatie. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

C# .NET Ontwikkelaar ASP.NET

Samengevat: Deze werkgever is een inkooporganisatie. Ben jij een ervaren .Net ontwikkelaar? Heb je ervaring met .Net en C#? Vaste baan: C# .NET Developer .Net MBO HBO €3.100 - €4.300 Onze missie is: “Een essentiële bijdrage leveren aan het verlagen van de integrale kostprijs van de aangesloten groothandels, middels het bundelen van inkoopvolume en het creëren van synergie met en tussen de groothandels en leveranciers, met scherpe inkoopprijzen, goede handelscondities en gerichte dienstverlening als resultaat” Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! De branche van dit

Bekijk vacature »

Senior Software Developer C++

Vacature details Vakgebied: Software/IT Opleiding: Senior Vacature ID: 13342 Introductie Do you want to work for one of the most innovative companies located in the region of Eindhoven. Currently Due to growth we are looking for a Senior Software Developer. Our client is a high-tech company with international roots and can provide you with a challenging opportunity. Functieomschrijving Responsibilities: Design, develop, and maintain high-quality software applications in C++ Collaborate with other engineers, product managers, and stakeholders to understand requirements and develop solutions Write clean, maintainable, and efficient code Conduct thorough testing and debugging to ensure high-quality software Optimize applications for

Bekijk vacature »

Medior/senior Fullstack developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Senior Developer ERP Dynamics 365

Samengevat: Deze werkgever is een softwarebedrijf. Ben jij een enthousiaste developer? Heb je ervaring met ERP of Dynamic 365 bussines central? Vaste baan: ERP Applicatie Specialist ERP MBO €3.600 - €5.200 Wij houden ons als bedrijf bezig met het leveren en implementeren van het Microsoft Dynamics pakket binnen verschillende industriële sectoren. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Binnen ons open team is er een no-nonsense cultuur. Daarnaast is er veel onderling contact door de korte communicatielijnen. Het team werkt enthousiast samen om een

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 »

SAP ABAP Developer

Dit ga je doen Software ontwikkeling met behulp van o.a. ABAP, Sapscript en Smartforms Maatwerk development op SAP ECC 6.0, in de toekomst S/4 HANA Samenwerken met Business Analisten die functioneel en technisch ontwerpen aanleveren Testen van opgeleverde software Bugfixing Ondersteuning van eindgebruikers Hier ga je werken Onze klant, een internationaal gevestigd productiebedrijf dat mensen blij maakt, is ter versterking op zoek naar een ABAP Developer voor hun SAP team. Het team van 4 mensen verzorgt de ontwikkeling van maatwerk voor de SAP omgeving waar wordt gewerkt met modules SD, FI/CO, PM en MM. Momenteel draait het bedrijf op SAP

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

Bekijk vacature »

Front-end developer Supply Chain Angular, ReactJS,

Functie Het development team bestaat momenteel uit 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creëren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld meedenken over strategie en design. Hierin krijg je veel vrijheid om de functie naar eigen inzicht in te vullen en te pionieren. Alle data die wordt gebruikt is zichtbaar in een webapplicatie, geschreven in Angular en React. Momenteel zijn ze bezig om de dashboards anders vorm te geven en de

Bekijk vacature »

Developer (One Data)

Do you have experience with managing IT Teams in a service delivery organization? Are you keen to bring the team and our platform to a higher level? Then Nutreco has a very interesting role for you! As a One Data developer you are responsible for the management, running and functional use of our integration landscape and processes within Nutreco. Nutreco is using at this time BizTalk 2016, and Apigee for its API management, to be replaced by Azure Integration Services as of 2023. You will be part of a virtual teams of 11 people (own and outsourced) working in an

Bekijk vacature »

PHP ontwikkelaar

Functie Jij komt te werken in een development team van 9 man. Het grootste deel doet back end development en daarnaast is er 1 teamlead en 1 tester in het team. Dit Agile team is van groots belang voor de organisatie omdat zij voornamelijk alle eigen systemen in-house ontwikkelen. Naast het door ontwikkelen van het bestaande platform en de software die daarbij komt kijken, zul jij je ook bezighouden met het realiseren en opzetten van nieuwe projecten binnen het bedrijf. Je staat nauw met de klant in contact om zo hun wensen zo goed mogelijk te kunnen realiseren. Daarnaast ontwikkel

Bekijk vacature »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

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

11/12/2023 13:59:05
 
- -

- -

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.