I have been dealing with PHP since 2000, but not very actively, and my knowledge of PHP5 is quite horrible. Recently I got my interest for webdevelopment back after a 5 year long break, and I started working on a project. I wrote a class for that project that became fairly large, but so far without any specific error handling.

The purpose of the class is to parse HTML files with a specific layout and handle its data, and it was more or less a training exercise for me to get back into the game. I started to rewrite the class now, and I decided it was time to be a little more professional about error handling than simply using die(), which I have been using a lot so far. I think we can all agree that is a terrible direction to take. I want the class to be quite project independent, so that I can distribute it to whoever wants to use it.

The HTML files I want to parse contain tables with specific bordercolors, trs with specific bgcolors, but the number of elements are dynamic. To validate that the HTML files actually have this specific pattern, I have the following sample (pseudo)code

```
public function Validate() {

    $tables = getall('table', $this->data);

    foreach ($tables as $table) {
        if ($table->bordercolor != 'navy' && $table->cellspacing != 0) {
            // Error
        }

        foreach ($tables->tr as $tr) {
            if ($tr->bgcolor != '#fff') {
                // Error
            }
        }
    }
    return true;
}

```

Where it says // Error, the HTML layout doesn't check out and my class should not attempt to parse it. Traditionally I would do this:

```
if ($table->bgcolor != '#fff') {
    $this->error = 'Invalid HTML layout';
    return false;
}

```

And from where I call the method I would use

```
if ($class->Validate() === false) {
    exit_with_error($class->GetError()); // Simple return of $this->error
}

```

I've always thought it's a decent approach because of it's simplicity. However that's also a disadvantage as it doesn't really provide any in-depth information of the error apart from the text itself. I can't see where the error was triggered, what methods were called, etc.

Since I resumed my PHP hobby I have discovered exceptions. My problem with them is simply that I don't understand how to properly use them. And if I should use them at all. I would like my class to be portable; can I use exceptions to handle errors at all? And if yes, how can I communicate the errors (i.e. translate my traditional error handling)? Or perhaps there is an even better approach to take, which I don't know about.

Any help appreciated :)