Permalänk
Medlem

Bra system för felkoder? (php)

Goddagens...

Något jag aldrig riktigt har fått nån bra struktur på är felkoder. Oavsett programmeringsspråk.

På den gamla goda tiden när jag kodade c++ så använde jag aldrig någon felkod, jag kastade exceptions med feltexter, som printades ut i en windows-popup.

throw network_error("Could not find host");

Det fungerade galant i de flesta fall, men den tiden är förbi, och behovet är just nu lite annorlunda, eftersom jag använder php, och att vi inte ska kasta runt texter, utan tal.

Ofta när jag har en funktion som innehåller felhantering så gör jag att den returnerar olika värden beroende på resultat, typ såhär:

function minFunktion($whatever) { if($whatever == 0) return -1; if($whatever < 0) $return -2; if($whatever * 35 == 115) $return -3; // gör lite nytta return true; }

Ungefär så brukar jag göra, så att resultatet alltid kan läsas utifrån. Det räcker inte med om något fungerar eller inte, om det inte funkar så ska man få reda på varför.

Men problemet här är att om alla funktioner returnerar samma sal så går det t.ex. inte att bara lagra talet i en databas och sedan hämta något meddelande ur en tabell, eftersom det inte går att identifiera vilket "-3" det handlar om.

Istället kan man ha ett unikt tal i varje funktion... så att man i ett stort projekt snart har siffror på 100+ men det går ju inte att hålla koll på.. "har jag gjort 99 förut? *söker på return 99 och ser om jag hittar nåt*"

För att få lite bättre koll skapar man förslagsvis konstanter.

define("minFunktion_whatever_is_zero", -1); define("minFunktion_whatever_below_zero", -2); define("minFunktion_whatever_times_35_is_115", -3); define("annanFunktion_annat_problem", -4); ..... i all oändlighet med ett unikt index för varje fel

Sen kan man komplettera denna med en tabell för felmeddelanden, eller så gör man nån felklass av alltihop som bakar ihop det på ett fint sätt.
Då kan man få lite mer struktur, men det är fortfarande lite drygt att hålla koll på.

Är det någon som har jobbat med felhantering av detta slag i ett lite större projekt på ett sätt som känns optimalt?

Problemet som jag vill ha löst kretsar alltså kring att funktioner returnerar ett tal - som ska lagras någonstans och samtidigt - ELLER vid ett annat tillfälle ska kunna identifieras från någon typ av tabell.

Jag har provat några olika metoder, men just nu är jag inne på att köra två listor med defines för mina felmeddelanden. En som ser ut som den ovan, och en annan för feltext som ska visas, som har fel-Id som index.

Men jag väntar på att någon ska komma upp med något ultimat.

Permalänk
Medlem

Konstanter är väl en bra metod...

// Multiplar av två, så man kan köra ERR_NETWORK | ERR_INPUT etc. define('ERR_NETWORK', 1); define('ERR_INPUT', 2); define('ERR_NÅTANNAT', 4); define('ERR_UNKNOWN', 1024); // Felmeddelandetabell $errmsg = Array(1 => 'Network error', 2 => 'Input error', 3 => 'Network and input error', 4 => 'Nåt annat fel', 5 => 'Nätverk och nåt annat', 6 => 'Ja du fattar....', 1024 => 'Okänt fel');

Permalänk
Medlem

Mja, rätt utformat så tror jag absolut det fungerar. Det vore kul att se vilka lösningar ni andra arbetar och trivs med.

En liten detalj: Din lösning med textmeddelanden är helt oanvändbar i praktiken om man har många typer av fel. Man kan ju inte göra en sträng för varje felkombination om man har 100 olika felmeddelanden.

Men jag fattar vad du menar

Permalänk
Medlem

Exceptions i PHP finns ju också (som i C++), där man skapar olika typer av fel. Sedan kan man återanvända dem och ange specifika felmeddelanden i textformat.

http://se.php.net/exceptions