@niko83

Организация кода, паттерн, php?

есть какой метод, кроме результата от работы этого метода хочется получать какую-то инфу


например вот код:

public function parserText($a) {<br/>
 ...<br/>
 return $b<br/>
}



но в результате работы кода, например, текст $a был слишком длинным и мы его обрезали до 100 символов. Или мы обработали $a и вернули $b, но в при обработке кода мы обрабатывали $a как будто он в кодировке ХХХ


Так вот вопрос, как собирать подобную сопутсвующую инфу работы скрипта.


возвращать return (array($b, $infoMessage)); не хочется — слишком крутые изменения по коду, да и интерфейс нарушается,


Могу ещё внедрять в метод передачу по ссылке и после работы скрипта смотреть что в $infoMessage появилось

public function parserText($a, &$infoMessage) {<br/>
 ...<br/>



Какие можете ещё посоветовать достойные решения этой проблемы?
  • Вопрос задан
  • 2850 просмотров
Пригласить эксперта
Ответы на вопрос 3
Можно посмотреть как реализовано у других с ошибками.

1. Получать ошибку отдельным методом. Например: mysql_error — получение текста ошибки последней операции.

2. И ваш способ со ссылкой. Например: fsockopen — 3 и 4 аргументы передаются по ссылкам и содержат код и текст ошибки соответственно.

Но первый мне нравится больше — не надо изменять интерфейс существующих методов.
Ответ написан
Комментировать
Gibbzy
@Gibbzy
Ну можно например так:
class Parser
{
protected $_messages = array();
public function parse($a)
{
$this->_messages['message key'] = 'some message ...';
/// some code;
return $b;
}

public function getMessages()
{
return $this->messages;
}
}

$parser = new Parser();
$parser->parse($a);
$messages = $parser->getMessages();
Ответ написан
prairie_dog
@prairie_dog
Можно возвращать объект, и использовать магический метод toString
public function __toString()
{
return $this->output;
}

Т.о. старый код будет работать(он же работал с полученной переменной как с строкой), а в новом коде Вы сможете обратиться к этому объекту и вызвать методы, которые возвращают дополнительную информацию. Это, конечно, ИМХО и надо смотреть на код =) Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы