Коротко — проблема имён решается изоляцией кода. Ниже — практические способы и объяснения.
1) Используйте пространства имён (лучше всего, PHP ≥5.3)
- В файле с функцией:
namespace MyProject\UI;
function avatar($id){ /* ... */ }
- Вызов:
\MyProject\UI\avatar($ank['id']);
Преимущество: нет конфликта с функцией avatar в другом namespace.
2) Поместите в класс (инстанс или статический метод)
class Avatar {
public static function show($id){ /* ... */ }
}
Avatar::show($ank['id']);
Это тоже избегает глобальных имён функций.
3) Проверка перед объявлением (быстрое решение)
if (!function_exists('avatar')) {
function avatar($id){ /* ... */ }
}
Работает, но скрывает проблему и не решает дизайн-конфликты — можно случайно использовать не ту реализацию.
4) Используйте префиксы в именах
function mysite_avatar($id){ /* ... */ }
Простое и надёжное, если нельзя использовать namespace или классы.
5) Лучше избегать глобальных переменных
- Не объявляйте данные в глобальной области видимости; передавайте $ank['id'] как аргумент функции.
- Не используйте extract(), это часто приводит к конфликтам имён переменных.
6) Защита от повторного включения файлов
- include_once / require_once гарантирует, что файл не подключится дважды (и функция не будет объявлена повторно).
7) Анонимные функции / замыкания
- Можно присвоить функцию переменной или передавать её как callback, чтобы не создавать глобальных имён:
$avatarFn = function($id){ /*...*/ };
echo $avatarFn($ank['id']);
Что такое komm.php?
- Название komm.php не стандартизировано — обычно в русскоязычных проектах "komm" сокращение от "комментарии" или "коммутатор/комманда". Скорее всего этот файл:
- реализует логику комментариев (просмотр, добавление, форма) или
- содержит кусок кода/шаблона с комментариями/коммандами, подключаемый на странице.
- Чтобы точно ответить — откройте файл и посмотрите содержимое (или покажите его здесь). Обратите внимание: есть ли там объявление function avatar(...), global-переменные, include/require — это и приведёт к конфликту.
Если хотите — пришлите содержимое komm.php или укажите структуру проекта (какие файлы подключаете и как), и я подскажу конкретное исправление.