Эй, вот вопрос для вас, ребята.
У меня так много времени, чтобы выбрать обработку ошибок для классов в PHP.
Например, в Ajax PHP Handling Classes я делаю это следующим образом:
public function setError($msg) { $this->errors[] = $msg; } public function isFailed() { return (count($errors) > 0 ? true : false); // if errors > 0 the request is failed } public function getJsonResp() { if($this->isFailed()) { $resp = array('result' => false, 'message' => $this->errors[0]); } else { $resp = array('result' => true); array_merge($resp, $this->success_data); // the success data is set later } return json_encode($resp); } // an example function for a execution of a method would be this public function switchMethod($method) { switch($method) { case 'create': if(!isset($param1, $param2)) { $this->setError('param1 or param2 not found'); } else { $this->createSomething(); } break; default: $this->setError('Method not found'); } }
Поэтому давайте узнаем, что я хочу для aks: есть ли лучшее решение для обработки ошибок?
Когда дело доходит до ООП, лучше всего использовать Исключения для обработки ваших ошибок, например:
class Example extends BaseExample implements IExample { public function getExamples() { if($this->ExamplesReady === false) { throw new ExampleException("Examples are not ready."); } } } class ExampleException extends Exception{}
бросая исключения внутри вашего класса и исключая исключения за пределами классов, которые бросают их, – это то, как я обычно общаюсь.
Пример использования:
$Example = new Example(); try { $Examples = $Example->getExamples(); foreach($Examples as $Example) { //... } }catch(ExampleException $e) { Registry::get("Output")->displayError("Unable to perform action",$e); }
и ваш displayError
будет использовать $e->getMessage()
в качестве информации об ошибке.
Как правило, при программировании в ООП вы будете использовать Исключения в качестве обработчика ошибок.