Итак, есть желание выводить уведомление об ошибках для пользователей с помощью сбора оных в единый массив с последующей обработкой и выводом.
Например:
$error[] = 'Вы не зарегистрированы!';
$error[] = 'Нет прав на выполнение операции!';
etc
// И ловит все это функция находящаяся в конце потока перед самым выводом
function get_errors ($error) {
foreach ($error as $key => $value)
echo '<div>'.Тут ошибка.'</div>'
}
// И предположим здесь я объявил функцию
get_errors($error);
Так вот при чистом процедурном подходе так все и делаю и проблем нет. Но мне понадобилось написать парочку классов и при их написании стала необходимость также выводить ошибки внутри классов при той же функции без повторов и порождения сущностей.
Был вариант поместить функцию в класс и ловить внутренние свойства так $this->error[] = 'Ошибка';
А внешние уже при определении функции, но подход справедлив только при одном классе.
В общем помогите с этой задачей, если что-то непонятно можно и поподробнее. Заранее всем спасибо.
Спустя 9 минут, 58 секунд (6.02.2012 - 14:47) nugle написал(а):
rusiamen
покажи как в классе ты это делаешь
покажи как в классе ты это делаешь
Спустя 5 минут, 43 секунды (6.02.2012 - 14:53) rusiamen написал(а):
Тоже самое только делю на две части, внешнюю и внутри классовую.
Только потом так вывожу, так как функцию для получения свойств определяю в классе.
Аргумент $error для внешнего доступа, внутри классовый уже сам определяется по свойству $this->error
function get_errors ($error) {
// Для внешнего
foreach ($error as $key => $value)
echo '<div>'.Тут ошибка.'</div>'
// Для внутри классового
foreach ($this->error as $key => $value)
echo '<div>'.Тут ошибка.'</div>'
}
Только потом так вывожу, так как функцию для получения свойств определяю в классе.
$class->get_errors($error);
Аргумент $error для внешнего доступа, внутри классовый уже сам определяется по свойству $this->error
Спустя 8 часов, 18 минут, 28 секунд (6.02.2012 - 23:11) wplounge написал(а):
function get_errors ($error) {
foreach ($error as $key => $value)
echo '<div>'.Тут ошибка.'</div>'
}
А что мешает подключить файл с этой функцией к файлу класса и передавать в функцию ошибки класса вот так:
get_errors($this->errors);
Спустя 22 минуты, 26 секунд (6.02.2012 - 23:33) rusiamen написал(а):
Дело в том, что ошибки записываются а массив, а только после обрабатываются функцией для правильного вывода. (именно в массив, функция только для обработки)
То есть если уточнить, мне нужно выводить этот массив из класса если конечная функция ловли ошибок вне его. Если же функция внутри класса, то этот класс должен быть последним и он должен наследовать цепочку предыдущих классов для ловли ошибок и из них.
Но это не выход.
То есть если уточнить, мне нужно выводить этот массив из класса если конечная функция ловли ошибок вне его. Если же функция внутри класса, то этот класс должен быть последним и он должен наследовать цепочку предыдущих классов для ловли ошибок и из них.
Но это не выход.
Спустя 2 дня, 16 часов, 42 минуты, 53 секунды (9.02.2012 - 16:16) rusiamen написал(а):
Наконец-то я сам справился со своей проблемой, кому интересно вот решение:
Фишка в том, что мы собираем ошибки со всего приложения, и с классов, и процедурной логики.
В любом подключенном классе достаточно написать
Перед этим желательно в классе определив свойство
Вне классов, можно просто написать
Сама функция
Для того чтобы использовать функцию ее нужно вызывать только так, и в конце после все логики.
Лучше всего в главном шаблоне.
Возможно код посредственен, но до всего дошел сам и сам себя спас)
Фишка в том, что мы собираем ошибки со всего приложения, и с классов, и процедурной логики.
В любом подключенном классе достаточно написать
$this->error[] = 'Ошибка которую надо красиво показать пользователю!';
Перед этим желательно в классе определив свойство
public $error = array();
Вне классов, можно просто написать
$error[] = 'Ошибка которую надо красиво показать пользователю!';
Сама функция
function get_errors ($error,$all_vars = null) {
// Сканируем классы
foreach ($all_vars as $key0 => $value0) {
if (is_object($value0)) {
if (isset($value0->error)) {
foreach($value0->error as $key_error => $value_error)
$error[] = $value_error;
}
}
}
// Финальный сбор ошибок
$errors = '';
foreach ($error as $key => $value)
$errors .= '<div class="error">'.$value.'</div>';
// Возвращаем
return $errors;
}
Для того чтобы использовать функцию ее нужно вызывать только так, и в конце после все логики.
Лучше всего в главном шаблоне.
echo get_errors($error,get_defined_vars());
Возможно код посредственен, но до всего дошел сам и сам себя спас)