[PHP] default error handling geeft notificaties

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
Hallo iedereen,

Ik heb een stuk code wat een SOAP API call opzet.
In deze code zit een 'checkforerror' functie.
En met deze functie heb ik een uitdaging.
Namelijk het volgende:
Wanneer ik de code uitvoer met de correcte instellingen dan komt er een melding van:

Notice: Undefined property: stdClass::$LastErrorCode in E:\xampp\htdocs\test\test.php on line 100
Notice: Undefined property: stdClass::$LastErrorDescription in E:\xampp\htdocs\test\test.php on line 101

Bovenstaande meldingen wil ik ondervangen / voorkomen.

Wanneer ik opzettelijk een fout introduceer dan krijgen we keurig netjes een melding:
There is another error!!:
E001.3: Invalid credentials [bbbbbbbbb-zzzz-yyyy-xxxx-ccccccccccc}

Om te onderzoeken wat het probleem is, heb ik m.b.v. print_r eerst gekeken welke data er in $rawresponse zitten.
Bij de "OpenSession" call krijgen we het volgende te zien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Begin checkforerror function: 

Print_r value rawresponse: 
stdClass Object
(
    [OpenSessionResult] => stdClass Object
        (
            [ErrorMsg] => stdClass Object
                (
                    [LastErrorCode] => 
                    [LastErrorDescription] => 
                )

            [SessionID] => {CBDB7DE0-D601-4BA2-9274-C22556D5D6BF}
        )

)


Bij de "GetRelaties" call krijgen we het volgende te zien:
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
Begin checkforerror function: 

Print_r value rawresponse: 
stdClass Object
(
    [GetRelatiesResult] => stdClass Object
        (
            [ErrorMsg] => stdClass Object
                (
                )

            [Relaties] => stdClass Object
                (
                    [cRelatie] => stdClass Object
                        (
                            [ID] => 19654949
                ........
                ........
                       )

                )

        )

)


Bij de "GetRelaties" call worden er blijkbaar geen "waardes" mee gegeven aan "[ErrorMsg]".
Hierdoor is de code vanaf regel 100 incorrect wanneer deze uitgevoerd worden en veroorzaken de notificaties.

De gedachte is om een check te doen of er wel waardes in "ErrorMsg" zitten.
Zo ja, dan de regels vanaf 100 uitvoeren

Ik ben al op zoek geweest bij een aantal standaard PHP functies maar het lukt mij (nog) niet om uberhaupt een wisselende true of false waarde te generen.
Zie regel 73 tm 93
Zoals je in de code kunt zien heb ik 3 verschillende functies geprobeerd.
Ik vraag me af, of deze gedachte gang wel correct is om de checkforerror functie te verbeteren, of moet ik totaal iets anders gaan denken.

Voor zover mijn beginnende PHP kennis reikt, hebben we hier te maken met een object, wat een associative, multidimensional array is.

Kan iemand mij die juiste richting op sturen als beginnende PHP gebruiker ?
Het hoeft niet een pasklaar antwoord te zijn.
Maar tips wat de juiste functie is of aangeven waar mijn gedachtes fout gaan?

Hier onder nog de opgeschoonde code.
PHP:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
// declare variabels

try {
  $client = new SoapClient("https://link?WSDL");
  $Username = "a@a.com";
  $SecurityCode1 = "xxxxxx";
  $SecurityCode2 = "bbbbbbbbb-zzzz-yyyy-xxxx-ccccccccccc";


// open session and get sessionid
  $params = array(
    "Username" => $Username,
    "SecurityCode1" => $SecurityCode1,
    "SecurityCode2" => $SecurityCode2
  );

  $response = $client->__soapCall("OpenSession", array($params));
  checkforerror($response, "OpenSessionResult");

  $SessionID = $response->OpenSessionResult->SessionID;


// call for 1 specific relation
  $params = array(
    "SecurityCode2" => $SecurityCode2,
    "SessionID" => $SessionID,
    'cFilter' => array(
              "Trefwoord" => "",
              "Code" => "DEB3",
              "ID" => 0
              )
  );

  $response = $client->__soapCall("GetRelaties", array($params));
  checkforerror($response, "GetRelatiesResult");


// close session
  $params = array(
    "SessionID" => $SessionID
  );

  $response = $client->__soapCall("CloseSession", array($params));
}

catch(SoapFault $soapFault) {
  echo '<strong>There is a SOAP error!!:</strong><br>';
  echo $soapFault;
  echo "<hr>";
}


// default error handling
function checkforerror($rawresponse, $sub) {

  //here starts the trouble shooting code
  echo "Begin checkforerror function: <br> <br>";

  echo "var_dump value sub: <br><br>";
  var_dump ($sub);
  echo "<hr>";

  echo "Print_r value rawresponse: <br>";
  echo "<pre>";
  print_r ($rawresponse);
  echo "</pre>";
  echo "<hr>";

  echo "Value: " . $sub;
  echo "<hr>";

  //var_dump (isset($rawresponse));                                //result => always bool(true)
  //var_dump (isset($rawresponse->$sub));                          //result => always bool(true)
  //var_dump (isset($rawresponse->$sub->ErrorMsg));                //result => always bool(true)
  //var_dump (isset($rawresponse->$sub->ErrorMsg->LastErrorCode)); //result => always bool(true)
  //var_dump (isset($rawresponse->ErrorMsg));                      //result => always bool(false)
  //var_dump (isset($rawresponse->ErrorMsg->LastErrorCode));       //result => always bool(false)
  //var_dump (isset($sub->ErrorMsg));                              //result => always bool(false)
  //var_dump (isset($sub->LastErrorCode));                         //result => always bool(false)

  //var_dump (property_exists($rawresponse, 'ErrorMsg'));          //result => always bool(false)
  //var_dump (property_exists($rawresponse, 'LastErrorCode'));     //result => always bool(false)
  //var_dump (property_exists($sub, 'ErrorMsg'));                  //result => always bool(false)
  //var_dump (property_exists($sub, 'LastErrorCode'));             //result => always bool(false)

  //var_dump (array_key_exists($sub, $rawresponse));               //result => always bool(true)
  //var_dump (array_key_exists('sub->ErrorMsg', $rawresponse));    //result => always bool(true)
  //var_dump (array_key_exists('ErrorMsg', $sub));                 //result => Warning: array_key_exists() expects parameter 2 to be array, string given
  //var_dump (array_key_exists('ErrorMsg', $rawresponse));         //result => always bool(false)
  //var_dump (array_key_exists('LastErrorCode', $rawresponse));    //result => always bool(false)
  //var_dump (array_key_exists('$sub->ErrorMsg->LastErrorCode', $rawresponse));    //result => always bool(false)
  //var_dump (array_key_exists('sub->ErrorMsg->LastErrorCode', $rawresponse));     //result => always bool(false)


  echo "<hr>";

   //here ends the trouble shooting code

    $LastErrorCode = $rawresponse->$sub->ErrorMsg->LastErrorCode;
    $LastErrorDescription = $rawresponse->$sub->ErrorMsg->LastErrorDescription;
    if($LastErrorCode <> '') {
      echo '<strong>There is another error!!:</strong><br>';
      echo $LastErrorCode . ': ' . $LastErrorDescription;
      echo "<hr>";
      exit();
      }
}

Beste antwoord (via S.O. op 13-08-2019 20:41)


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

S.O. schreef op maandag 5 augustus 2019 @ 22:55:

De gedachte is om een check te doen of er wel waardes in "ErrorMsg" zitten.
Zo ja, dan de regels vanaf 100 uitvoeren

Ik ben al op zoek geweest bij een aantal standaard PHP functies maar het lukt mij (nog) niet om uberhaupt een wisselende true of false waarde te generen.
Zie regel 73 tm 93
Zoals je in de code kunt zien heb ik 3 verschillende functies geprobeerd.
Ik vraag me af, of deze gedachte gang wel correct is om de checkforerror functie te verbeteren, of moet ik totaal iets anders gaan denken.
Je heb de juiste versie er al tussen zitten, maar zoveel code eromheen dat het me niet verbaast dat je uiteindelijk e.e.a. verkeerd hebt zitten testen ;)

Probeer volgende keer je probleemcode nog veel verder te reduceren; tot exact wat je wilt testen, ipv nog allerlei startup-dingen die roet in het eten kunnen gooien :)

Hierop testen met isset zou namelijk genoeg moeten zijn:
$rawresponse->$sub->ErrorMsg->LastErrorCode

Je kan het eventueel nog verduidelijken door het zo te formuleren:
$rawresponse->{$sub}->ErrorMsg->LastErrorCode
Dan maak je wat duidelijker dat je niet de ErrorMsg-property van $sub probeert op te vragen.

Maar deze voorbeeld-code geeft bij mij zoals verwacht een false en true terug:
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
 php -a
Interactive mode enabled

php > $a = new stdClass();
php > $a->b = new stdClass();
php > $a->b->ErrorMsg = new stdClass();
php > print_r($a);
stdClass Object
(
    [b] => stdClass Object
        (
            [ErrorMsg] => stdClass Object
                (
                )

        )

)
php > $sub = 'b';
php > var_dump(isset($a->$sub->ErrorMsg));
bool(true)
php > var_dump(isset($a->$sub->ErrorMsg->LastErrorCode));
bool(false)
php > var_dump(isset($a->{$sub}->ErrorMsg->LastErrorCode));
bool(false)
php >
php > $a->b->ErrorMsg->LastErrorCode = 'bestaat';
php > var_dump(isset($a->$sub->ErrorMsg->LastErrorCode));
bool(true)
php > var_dump(isset($a->{$sub}->ErrorMsg->LastErrorCode));
bool(true)


Je kan trouwens ook nog de lege-string test en de isset combineren met de empty-methode. Die werkt verder in dit geval hetzelfde als de isset, maar je moet uiteraard dan testen op 'if ( ! empty(...)) { } '

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
Ik kan me eerlijk gezegd niet voorstellen dat regel 76 true is, dat zal eerder always false zijn.

In de print_r die je doet zie je dat het ErrorMsg object altijd bestaat, maar dat het in het ene geval een leeg object is en in het andere geval een object met de properties LastErrorCode en LastErrorDescription, echter zijn deze beide properties null.

De property_exists tests die je doet stop je een verkeede eerste parameter in. De $rawResponse bevat geen property ErrorMsg of LastErrorCode, die bevat alleen wat er in $sub zit.
Je moet er ook niet direct $sub instoppen, want dat is domweg een string en geen object.

Waar je hier om vraagt is waarschijnlijk property_exists($rawResponse->$sub->ErrorMsg, 'LastErrorCode')

Ik neem verder aan dat je je ervan bewust bent dat dit echt hobby code is en absoluut niet geschikt om ergens in een productie omgeving te draaien.

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

S.O. schreef op maandag 5 augustus 2019 @ 22:55:

De gedachte is om een check te doen of er wel waardes in "ErrorMsg" zitten.
Zo ja, dan de regels vanaf 100 uitvoeren

Ik ben al op zoek geweest bij een aantal standaard PHP functies maar het lukt mij (nog) niet om uberhaupt een wisselende true of false waarde te generen.
Zie regel 73 tm 93
Zoals je in de code kunt zien heb ik 3 verschillende functies geprobeerd.
Ik vraag me af, of deze gedachte gang wel correct is om de checkforerror functie te verbeteren, of moet ik totaal iets anders gaan denken.
Je heb de juiste versie er al tussen zitten, maar zoveel code eromheen dat het me niet verbaast dat je uiteindelijk e.e.a. verkeerd hebt zitten testen ;)

Probeer volgende keer je probleemcode nog veel verder te reduceren; tot exact wat je wilt testen, ipv nog allerlei startup-dingen die roet in het eten kunnen gooien :)

Hierop testen met isset zou namelijk genoeg moeten zijn:
$rawresponse->$sub->ErrorMsg->LastErrorCode

Je kan het eventueel nog verduidelijken door het zo te formuleren:
$rawresponse->{$sub}->ErrorMsg->LastErrorCode
Dan maak je wat duidelijker dat je niet de ErrorMsg-property van $sub probeert op te vragen.

Maar deze voorbeeld-code geeft bij mij zoals verwacht een false en true terug:
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
 php -a
Interactive mode enabled

php > $a = new stdClass();
php > $a->b = new stdClass();
php > $a->b->ErrorMsg = new stdClass();
php > print_r($a);
stdClass Object
(
    [b] => stdClass Object
        (
            [ErrorMsg] => stdClass Object
                (
                )

        )

)
php > $sub = 'b';
php > var_dump(isset($a->$sub->ErrorMsg));
bool(true)
php > var_dump(isset($a->$sub->ErrorMsg->LastErrorCode));
bool(false)
php > var_dump(isset($a->{$sub}->ErrorMsg->LastErrorCode));
bool(false)
php >
php > $a->b->ErrorMsg->LastErrorCode = 'bestaat';
php > var_dump(isset($a->$sub->ErrorMsg->LastErrorCode));
bool(true)
php > var_dump(isset($a->{$sub}->ErrorMsg->LastErrorCode));
bool(true)


Je kan trouwens ook nog de lege-string test en de isset combineren met de empty-methode. Die werkt verder in dit geval hetzelfde als de isset, maar je moet uiteraard dan testen op 'if ( ! empty(...)) { } '

Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
Ik ga met deze info aan de slag :)
Kijken of ik er nu wel uit kom.

Ik kom hier later op terug.

Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
Hopscotch schreef op dinsdag 6 augustus 2019 @ 00:16:
Ik neem verder aan dat je je ervan bewust bent dat dit echt hobby code is en absoluut niet geschikt om ergens in een productie omgeving te draaien.
Blijkbaar heb jij een bepaald idee / kennis over hoe code eruit zou moeten zien.
Kan je uitleggen wat je dan bedoeld?
Ik heb hier wel een aantal ideeen bij, maar zou ze graag willen vergelijken wat ik denk en weet.
Ik sta altijd open voor tips en nuttige info.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

S.O. schreef op vrijdag 9 augustus 2019 @ 17:19:
Ik heb hier wel een aantal ideeen bij, maar zou ze graag willen vergelijken wat ik denk en weet.
Dan post eerst je eigen ideeën maar eens, zullen wij kijken wat we daar nog op aan te vullen hebben ;) We zitten hier niet om gratis-en-voor-niks code reviews te doen ;) (Zie ook Wat vinden jullie van mijn code).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
RobIII schreef op vrijdag 9 augustus 2019 @ 17:27:
[...]

Dan post eerst je eigen ideeën maar eens,
Ik zal kijken of ik van mijn Webapp Project design document zover een extractie kan maken, dat ik de relevante info hier kan plaatsen.
Hier kom ik nog op terug :)

Zoals beloofd..

Als ik denk aan pro PHP code, denk ik aan de volgende eenvoudig dingen:
  • Controle of het PHP document niet benaderd wordt van een locatie waarvan dit niet verwacht is.
  • Separatie van code, zoals frontend code gescheiden van logica code en database beheer code.
  • Voorkomen van Type declaration (type hinting) door gebruik van strict_types
  • Gebruik van OO programmering.
  • Duidelijke folder structuur.
  • Elke class zijn eigen document.
  • Autoloading van classes.
  • Benaming van methodes die informatie ophalen beginnen met "get".
  • Benaming van methodes die informatie opslaan beginnen met "set".
  • Scope van methodes, constanten en properties moeten ingesteld zijn.
  • Scope van classes, methodes const en properties zo strict mogelijk houden.
  • Error output tijdens productie fase, niet naar scherm maar naar apart file of SQL database / tabel.
  • Debug / error output opties aan/uit zetten op een centrale locatie.
  • Code voorzien van goede werkende en geteste error handlers.
  • Volgorde code creatie; functie formuleren, test procedure maken, code schrijven, code testen aan de hand van de test procedure.
  • Gemaakte code documenteren.
  • Opmaak van code volgens vaste regels
  • Design patroon van code bijv. MVC model. >> Tevens aangeven welke versie van MVC gebruikt gaat worden.
  • Alle input van gebruikers valideren en filteren.
  • Connect naar database m.b.v. PDO en met gebruik van Prepared statements en Named parameters.
  • Sluiten van SQL connectie indien deze niet meer nodig is.
  • Zoveel mogelijk gebruik van associative array's.
  • Het gebruik van static properties en methodes zo veel mogelijk beperken.
  • Gebruik van "oude" (absolete) ingebouwde functies binnen PHP uitsluiten.
  • Wachtwoorden / accountgegevens niet in uitvoerende code opnemen.
  • Verwijder / unload objecten als deze niet meer nodig zijn.
  • Gebruik van Superglobal $_GET zoveel mogelijk beperken.
  • Gebruik van zo min mogelijk PHP externe bibliotheken.
  • Gebruik van duidelijke benamingen voor classes, methoden, properties, array's , variabelen, constanten, functies
  • Gebruik van Namespaces bij grote projecten

[ Voor 78% gewijzigd door S.O. op 11-08-2019 15:23 . Reden: Voorkomen dat het topic onnodig "omhoog geschopt" wordt. ]


Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
@ACM @Hopscotch

Van de volgende items werd ik me weer van bewust, naar aanleiding van jullie input:
Even eenvoudig omschreven:
Variabelen kunnen zich in 3 "toestanden" bevinden (Niet het juiste woord maar kan geen andere bedenken)
- Variabele bevat een waarde zoal Strings, Booleans, integers.
- Variable is gedeclareerd maar bevat geen waarde
- Variable bevat een speciale "Waarde" namelijk NULL

Tevens zat ik dus mis met het invullen van de juiste gegevens in de functies die ik getest heb en heb ik blijkbaar niet voldoende begrepen wat de PHP manual uitlegde over de diverse functies.

Ik zat uiteindelijk te testen of een "key" wel of niet bestond en niet te testen op de waarde van de desbetreffde "key".

Ook het voorbeeldje van, hoe de uitput van print_r eenvoudig lokaal kunt namaken, om mee testen is een eye opener.

Badankt voor jullie uitleg en tijd. :)

Acties:
  • 0 Henk 'm!

  • S.O.
  • Registratie: Januari 2012
  • Laatst online: 25-01-2021
RobIII schreef op vrijdag 9 augustus 2019 @ 17:27:
[...]
We zitten hier niet om gratis-en-voor-niks code reviews te doen ;) (Zie ook Wat vinden jullie van mijn code).
Even iets duidelijk maken zodat er geen misverstanden zijn ;)
1. Ik vraag niet om een code review.
2. In het topic wordt duidelijk verwezen naar de checkforerror functie.
3. Code is met opzet voorzien van commentaar en extra witregels en strakke opmaak.
4. Tevens laat ik zien wat ik geprobeerd heb en wat de resultaten hiervan zijn binnen de code snippet.
5. in de tekst vraag ik naar, of de checherrorfunctie niet goed van structuur is, e/o mijn gedacht van error handling (volgens mij een niet onbelangrijk item binnen programmeren..) wel correct zijn, gelet op de code.

Als ik punt 3 en 4 weg laat is de code 43 regels...Maar wel een stuk onduidelijker te lezen.

Als er teveel code staat, omdat ik als beginned PHP gebruiker dacht dat het relevant was en dit voor de gevorderde PHP als overbodige balast wordt gezien, dan mijn exucces.
Dus de scope van de gehele vraag stelling is, is de checkforerror functie.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Gebruik a.u.b. de wijzig-link (rechtsbovenaan je post) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:

Afbeeldingslocatie: https://tweakers.net/ext/f/rViZSDpQ5n2TpYCcyrDz83Jf/full.png


;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

S.O. schreef op vrijdag 9 augustus 2019 @ 23:10:
Variabelen kunnen zich in 3 "toestanden" bevinden (Niet het juiste woord maar kan geen andere bedenken)
- Variabele bevat een waarde zoal Strings, Booleans, integers.
- Variable is gedeclareerd maar bevat geen waarde
- Variable bevat een speciale "Waarde" namelijk NULL
Je kan het denk ik beter zo zien:
- Een variabele is gedefinieerd
- Een variabele is niet gedefinieerd

En daarnaast:
- Een gedefinieerde variabele heeft een waarde
- Een gedefinieerde variabele heeft geen waarde

Maar in de praktijk zijn die laatste twee nagenoeg hetzelfde, null wordt inderdaad gebruikt als indicatie dat iets geen waarde heeft. Maar dat kan ook komen omdat je zelf bewust ervoor kiest om iets op null te zetten.
Tevens zat ik dus mis met het invullen van de juiste gegevens in de functies die ik getest heb en heb ik blijkbaar niet voldoende begrepen wat de PHP manual uitlegde over de diverse functies.

Ik zat uiteindelijk te testen of een "key" wel of niet bestond en niet te testen op de waarde van de desbetreffde "key".
In veel gevallen zal je in php - al dan niet bewust - testen tegelijkertijd op 'is gedefinieerd' en 'is niet falsey' (alles wat bij php na casten naar boolean 'false' geeft)
Ook het voorbeeldje van, hoe de uitput van print_r eenvoudig lokaal kunt namaken, om mee testen is een eye opener.
't Je zal een hoop tijd besparen als je inderdaad een zo klein mogelijk deel van je probleem probeert te testen.
Daar zijn allerlei mogelijkheden voor.

Zoals in dit geval door, ergens dicht bij de plek waar je de fout ontdekt, variabelen na te maken zoals ze er 'zouden' moeten komen.
Op die manier kan je veel makkelijker de plek waar het misgaat opsporen. Want als je weet dat dat daar niet goed mee gaat, kan je voorlopig je 'input' negeren en moet je de fouten in de code erna oplossen. Als het met die namaakdata wel goed gaat, komt er blijkbaar wat anders binnen en moet je het juist aan die kant zoeken ;)

Acties:
  • +1 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
S.O. schreef op vrijdag 9 augustus 2019 @ 23:54:
[...]


Even iets duidelijk maken zodat er geen misverstanden zijn ;)
1. Ik vraag niet om een code review.
2. In het topic wordt duidelijk verwezen naar de checkforerror functie.
3. Code is met opzet voorzien van commentaar en extra witregels en strakke opmaak.
4. Tevens laat ik zien wat ik geprobeerd heb en wat de resultaten hiervan zijn binnen de code snippet.
5. in de tekst vraag ik naar, of de checherrorfunctie niet goed van structuur is, e/o mijn gedacht van error handling (volgens mij een niet onbelangrijk item binnen programmeren..) wel correct zijn, gelet op de code.

Als ik punt 3 en 4 weg laat is de code 43 regels...Maar wel een stuk onduidelijker te lezen.

Als er teveel code staat, omdat ik als beginned PHP gebruiker dacht dat het relevant was en dit voor de gevorderde PHP als overbodige balast wordt gezien, dan mijn exucces.
Dus de scope van de gehele vraag stelling is, is de checkforerror functie.
Ik had het ook over het stuk erboven, maar begrijp nu dat dat gedeelte puur ter opzet is om de error handling te checken? Wat dat betreft drie dingen die me opvallen:
  • De naam checkForError vind ik erg lelijk, ik heb hier een collega die het gelukkig is afgeleerd om functies check... te noemen. Als ik alleen de naam lees heb ik geen idee wat de functie doet. Geeft hij true terug als er een error is? Doet hij nog iets met de error?
  • Je laat de functie html printen, de functie zou volgens mij niks moeten afdrukken, enkel dingen loggen.
  • Gebruik nooit exit(); Dit stopt meteen de hele uitvoering van je script en je hebt geen enkele mogelijkheid meer om de error netjes af te handelen
In dit geval vraag ik mij ook af of deze functie nodig is, als ik de manual goed begrijp gooit de call functie een Exception als er iets mis gaat tenzij je in je parameters bij het aanmaken van je soapclient instelt dat hij dat niet moet doen. Maar dat zal je even moeten testen.
Pagina: 1