@Thores
Новичок.

Конфликт одинаковых функций. Как исправить?

Ребята помогите. Есть функция склонения числительных
<?php defined('JPATH_BASE') or die; 
$comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    $options = array();
    $options['object_id'] = $id;
    $options['object_group'] = 'com_content';
    $options['published'] = 1;
    $count = JCommentsModel::getCommentsCount($options);
/* Cклонение числительных */	
	$form1 = JText::_('INVIP_PREVIEW_COMMENT');
	$form2 = JText::_('INVIP_PREVIEW_COMMENTS');
	$form3 = JText::_('INVIP_PREVIEW_COMMENTSS');
	$form4 = JText::_('INVIP_PREVIEW_NONE_COMMENTS');
	function format_by_count($count, $form1, $form2, $form3){
    $count = abs($count) % 100;
    $lcount = $count % 10;
    if ($count >= 11 && $count <= 19) return($form3);
    if ($lcount >= 2 && $lcount <= 4) return($form2);
    if ($lcount == 1) return($form1);
    return $form3;
	}
	$counts = $count ? ($count . ' ' .  format_by_count($count, $form1, $form2, $form3)) : $form4;
}
?>
<li class="attr comments">
	<meta itemprop="commentsUserCount" content="<?php echo $count; ?> UserComments" />
	<?php echo $counts; ?>
</li>

Тут вначале идет запрос на количество комментариев. потом идет сама функция и вывод. И все работает когда допустим одна статья. а когда две получается что функцию снова запрашивает и получается ошибка. Помогите пожалуйста, как можно сделать что бы конфликта не было. Я не специалист, но знаю что тут все достаточно просто. Однако я решить проблему сам не смог.
  • Вопрос задан
  • 2395 просмотров
Решения вопроса 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
0) "получается ошибка" - плохое описание проблемы. Как минимум нужно писать текст ошибки и строчку.

1) Могу в режиме телепата предположить что приведенный Вами файл вызывается в цикле для каждой статьи.
Соответственно у вас получается 2е определение функции format_by_count.
Вообще лучше никогда не заниматься определением функции в условном блоке, а определять где то выше.
Локально проблему можно решить
if (!function_exists("format_by_count")) {
  function format_by_count($count, $form1, $form2, $form3){
    $count = abs($count) % 100;
    $lcount = $count % 10;
    if ($count >= 11 && $count <= 19) return($form3);
    if ($lcount >= 2 && $lcount <= 4) return($form2);
    if ($lcount == 1) return($form1);
    return $form3;
  }
}
но это все равно говнокод.

2) Писать html верстку и php логику в одном файле - дурной тон. Почитайте про mvc какой нибудь.
Ответ написан
Комментировать
He11ion
@He11ion
PHP-monkey
Удивительно, но ответ уже у Вас на экране - require_once - выносите функцию в отдельный файл и подключайте только один раз.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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