Squeak.ru - шаблоны программирования

PHP: как избежать повторного объявления функций?

Я склонен получать такие ошибки, как:

Неустранимая ошибка: невозможно повторно объявить get_raw_data_list() (ранее объявленный в /var/www/codes/handlers/make_a_thread/get_raw_data_list.php:7) в /var/www/codes/handlers/make_a_thread/get_raw_data_list.php в строке 19.

как избежать ошибки? Можно ли создать предложение IF, чтобы проверить, объявлена ​​ли функция перед ее объявлением?

05.09.2009

Ответы:


1

Используйте require_once или include_once в отличие от include или require при включении файлов, содержащих ваши функции.

Братья и сестры _once include и require заставят PHP проверять, был ли файл уже включен/требуется, и если да, то не include/require его снова, тем самым предотвращая 'невозможно повторно объявить функцию x ... фатальные ошибки.

05.09.2009
  • Хотя ответ karim79 может решить проблему оператора, на самом деле он не решает проблему. Я думаю, что ответ Dooltaz делает это правильно. 27.05.2013
  • Является ли хорошей практикой противопоставление поддержки кода таким образом, чтобы такой проблемы не возникало? Я имею в виду, что _once братьям и сестрам придется следить за тем, что уже было включено, и проверять это каждый раз, когда файл включается. 23.10.2014
  • @DimitrisDamilos Этот подход предпочтительнее, когда вы можете его использовать. Но это работает только в том случае, если коллизирующая функция исходит из того же файла. Один из примеров, когда вы не можете его использовать, — это если функция сталкивается с функцией, встроенной в php. 18.03.2015
  • @CodesInChaos У меня сейчас такая проблема. Я пытаюсь воссоздать password_hash() для 5.3. 19.05.2016
  • @RoboticRenaissance Обратите внимание на github.com/ircmaxell/password_compat, хотя это не работает в PHP до версии 5.3. 7, потому что у них глючная реализация bcrypt. 19.05.2016

  • 2
    if(!function_exists("get_raw_data_list")) {
    ... define function here ...
    }
    

    http://us.php.net/function_exists

    05.09.2009
  • Это может быть полезно для полифиллов, например, когда вы хотите добавить функцию в более старую версию php, которая была представлена ​​в более новых версиях php. В этом случае require_once не сможет избежать столкновения. 18.03.2015
  • Обратите внимание, что этот код должен быть добавлен перед использованием функции. 26.09.2016

  • 3

    "function_exists" сообщит вам, была ли уже объявлена ​​функция. . Хотя я подозреваю, что у вас проблемы с включением файлов более одного раза. Когда вы включаете файл, вы используете require_once или include_once или просто требуете/включаете?

    05.09.2009
  • Технически это не совсем правильно. Функция PHP может не существовать, но быть объявленной. например function_exists вернет false для любой функции, определенной в disable_functions конфигурации PHP. Однако эти функции по-прежнему объявлены. 13.09.2016

  • 4

    Если вы имеете дело с классами method_exists(), возможно, это то, что вы ищете:

    if(!method_exists(__CLASS__, 'function_name')){
        function function_name(){
    
        }
    }
    

    Это проверит текущий класс, чтобы убедиться, что функция function_name не существует, прежде чем пытаться объявить ее.

    16.06.2012
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...