Выйти из PHP-скрипта без ошибки - PullRequest
1 голос
/ 03 декабря 2011

У меня есть PHP-скрипт, который регистрирует около 20 функций.В идеале это должно быть загружено require_once.Я хочу сделать так, чтобы даже если он каким-то образом загружался более одного раза, он не пытался бы перерегистрировать функции.Я мог бы обернуть каждую декларацию в !function_exists, но мне интересно, есть ли более быстрый путь.(Или вы думаете, что 20 звонков на !function_exists ничтожно малы?) Я пытался использовать exit, но это вызывает ошибку.Можно ли выйти без выдачи ошибки?

if ( /* already loaded */ )  { 
    /* leave gracefully */
}  

/* declare ~20 functions */

Ответы [ 5 ]

4 голосов
/ 03 декабря 2011
if (!defined('ALREADY_LOADED')) {
    define('ALREADY_LOADED', true);
    // rest of your code goes here

}

Это проверяет, определена ли постоянная ALREADY_LOADED, а если нет, определяет константу и будет делать все, что вы хотите.

После того, как она была выполнена один раз,будет определена константа, и она не будет выполняться во второй раз.

Я предлагаю использовать более описательное имя константы, чем ALREADY_LOADED.

2 голосов
/ 03 декабря 2011

Я думаю, что использование ООП является наиболее практичным способом Может использоваться как класс со статическими функциями

class SimleClass{
    public static function func1($arg){...}
}

используйте это SimpeClass :: func1 ($ Arg);

или сиглет

class SimleClass{
    protected static $_instance=null;
    private function __construct(){...}
    public static function getInstance(){
       if(is_null(self::$_instance)
            self::$_instance=new SimpleClass();
       return self::$_instance;
    }
    public  function func1($arg){...}
}

используйте это SimpleClass :: деЫпзЬапс () -> func1 ($ Arg);

а как его подключить думай сам можно использовать include_once

и может реализовать класс автозагрузчика

function myClassLoader($className){
 include_once "/lib/$className.php";
}
spl_autoload_register(myClassLoader);

=============================================== ============== для более конкретного ответа требуется больше данных. Возможно, ваше приложение можно переставить, чтобы получить более логичную структуру

1 голос
/ 03 декабря 2011

function_exists неплохо.

Вы можете написать свои файлы сценариев php следующим образом.

/* file1.php */
if(!defined('FILE1')) {
define('FILE1', 1);
/////////////////////////
// PUT file contents here.

/////////////////////////
}// file.php finished.

Теперь вы можете включать этот файл столько раз, сколько захотите, здесьи там.Ничто не будет переопределено снова.

1 голос
/ 03 декабря 2011

Я бы постарался не переопределять функции на первом этапе (здесь требуется более одного раза).Выполнение 20x function_exists () ничего не стоит, только некоторое время на написание и перенос;) Возможно, вы могли бы попробовать вместо этого использовать классы / методы.

1 голос
/ 03 декабря 2011

Если вы как автор не требуете его более одного раза (или постоянно используете require_once()), проблем с перерегистрацией функций быть не должно.

Что касается выхода без ошибки, попробуйте die().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...