Building upon a question I already asked regarding exceptions, боюсь, что я мог бы неправильно писать функции php или злоупотреблять использованием исключений. Причина, почему я говорю об этом, потому что если пользовательские исключения будут пойманы с помощью попытаться/поймать блоков, то следующую функцию:Функции записи, относящиеся к исключениям
public function get_specific_page($page) {
if (!is_array($this->_page)){
throw new AisisCore_Template_TemplateException("<div class='error'>Trying to get a property from a non array.</div>");
}
return $this->_page[$page];
}
бы тогда можно назвать такие, как:
try{
get_specific_page($page);
}
catch(Exception $e){
echo $e->getMessage();
}
Проблема с этим подход заключается в том, что у меня есть много функций, которые написаны так, либо проверяя, существует ли файл, и выдает ошибку. Проверка, чтобы узнать, установлено ли значение в массиве, выбрасывание ошибки и моя проблема в том, что файл, который имеет дело с этими вызовами функций, может перегружаться с помощью try catch .....
Так что мой вопрос в том, как я бы лучше написал такие функции, чтобы у меня не было файлов php поверх загруженных инструкций try catch, но вы все равно сможете иметь собственные пользовательские функции.
Является ли это очевидным, как написать попытку уловить внутри функции?
Причина, по которой я спрашиваю, если я использую работу с работами в области и в компаниях, где мы пишем наши функции, как вы видите выше. Как верами я работал с кодовыми базами, которые имеют тонны этих функций, и я не вижу половину файлов, которые использованияКонтактные их делают кучу попробовать уловы ...
Update:
Я просматривал источник Зенд, чтобы лучше понять исключения и наткнулся на это:
public function setMessage($messageString, $messageKey = null)
{
if ($messageKey === null) {
$keys = array_keys($this->_messageTemplates);
foreach($keys as $key) {
$this->setMessage($messageString, $key);
}
return $this;
}
if (!isset($this->_messageTemplates[$messageKey])) {
require_once 'Zend/Validate/Exception.php';
throw new Zend_Validate_Exception("No message template exists for key '$messageKey'");
}
$this->_messageTemplates[$messageKey] = $messageString;
return $this;
}
Вы можете видеть, как они бросают новое сообщение об исключении вблизи дна, эта функция не вызывается, выполнив:
try{}catch(){}
еще, когда он бросает исключение, нет никакой проблемы с «неперехваченного исключением с сообщением»
У Zend есть свои обработчики исключений, некоторые из которых обработчик сам забирает. – vikingmaster