2014-11-23 3 views
0

Я хотел бы иметь свободу повторного использования определенных функций в PHP. Другими словами, у меня есть сценарий, который включает в себя некоторые файлы:Как избежать фатальной «PHP Неустранимая ошибка: не удается переопределить [..]»

include_once(dirname(__FILE__) . '/../drupal/includes/bootstrap.inc'); 
include_once(dirname(__FILE__) . '/../drupal/includes/common.inc'); 

Позже в этом выполнении сценария в зависимости от некоторых условий, то ясно, нам нужно загрузить все приложения, а не только отдельные файлы, однако. Это вызывает ошибку повторной записи, потому что при загрузке полного приложения некоторые из функций уже были включены в начале (то есть bootstrap.inc, common.inc). Что такое решение? Можно ли удалить импортированный файл, прежде чем включать его снова, чтобы избежать ошибки повторного выделения? Могу ли я получить контроль над тем, когда его okey для повторного использования и когда не на PHP? Благодарим за помощь

+1

Возможно дубликат http://stackoverflow.com/questions/2640958/redefining-php-function? – Gabriel

+0

Вы имеете в виду одну и ту же функцию, определенную в нескольких файлах? Если да, то почему? Различаются ли декларации? Если да, то почему у них одно и то же имя? Если вы структурируете свой код лучше, вы, вероятно, можете избежать не только этой проблемы, но и многих других в будущем по мере роста и поддержания своего приложения. – IMSoP

+0

IMSoP, переоценки одинаковы ... Что касается вашей точки зрения о структуре, я интегрирую независимые приложения, которые не имеют большого контроля над структурой. Я надеюсь, что PHP может дать мне этот контроль ... если я знаю о переобучении и все в порядке со мной, то г-н PHP, пожалуйста, пусть сценарий запускается ... почему фатальная ошибка? – latvian

ответ

3

Вы не можете «удалить» файл. Как только он находится, он находится внутри.

Обычно include_once или require_once сделают трюк. PHP проверит, не включен ли он, прежде чем пытаться включить его снова. Я бы удостоверился, что он используется во всех местах. Если функции, которые вы вызываете, находятся внутри класса, я бы проверил autoloading как способ управления вашими включениями.