Services_Openstreetmap icon indicating copy to clipboard operation
Services_Openstreetmap copied to clipboard

How to do error handling?

Open sascha-hendel opened this issue 6 years ago • 5 comments

I tried the examples. Works well, if all input, etc is correct, but if something is not the way it should be, PHP exit with error. Is there any suggested way to catch errors/do controlled error handling?

sascha-hendel avatar Mar 29 '18 13:03 sascha-hendel

Just wrapping your "client" code with the usual try/catch/finally statements should work.

For example:

$osm = new Services_OpenStreetMap();

try {
    var_dump($osm->getCoordsOfPlace("Nena, Irelande"));
} catch(Exception $ex) {
    var_dump ($ex->getMessage());
} finally {
    echo "yay!\n";
}

kenguest avatar Mar 29 '18 23:03 kenguest

Ok, this method works, but it is pretty hardcore... It would be better, if for example $changeset->commit() would return a statuscode/message with predefined status levels.

sascha-hendel avatar Mar 30 '18 09:03 sascha-hendel

Hi @sascha-hendel

I don't know how catching exceptions in PHP could be called hardcode, but I think you're correct that there are some places in Services_Openstreetmap where returning a simple value or array of values would be better than throwing a new exception.

Strictly speaking, exceptions should be for "exceptional scenarios" - something not easily predictable happening, for example. So in the example above, getCoordsOfPlace quite possibly should be returning false when it can't get the lat/lon for a named place that doesn't exist. BUT if there are connectivity issues, exceptions should be thrown.

Are there any specific cases where you think it would be easier for you that exceptions weren't being thrown? I don't want to start making changes that would break compatibility but I will consider this in future.

kenguest avatar Apr 12 '18 20:04 kenguest

Hi Ken, you are are right, that for connectivity issues, etc it is best to throw an exception. But I miss feedback for cases, where OSM throws an error. For example a $changeset->commit() should return an info, if the process was succesful or not.

sascha-hendel avatar Apr 15 '18 11:04 sascha-hendel

Hi @sascha-hendel, the changeset commit method now finally returns true if changes have been successfully applied.

(The API itself specifies that nothing is returned upon successful closing of a changeset, so this is just a check for a Response Code of 200)

Is there anything else about this that you might like to see improved?

kenguest avatar Sep 25 '19 22:09 kenguest