где хранить вспомогательные функции? - PullRequest
6 голосов
/ 27 апреля 2010

У меня много функций, которые я создаю или копирую из Интернета.

Интересно, должен ли я хранить их в файле, который я просто включаю в сценарий, или я должен хранить каждую функцию как статический метод в классе.

например. у меня есть функции getCurrentFolder () и isFilePhp ().

если они хранятся в файле как есть, или каждый в классе:

Папка :: getCurrent () File :: isPhp ();

как дела?

я знаю, что это своего рода вопрос "как ты хочешь", но было бы здорово с некоторыми советами / лучшими практиками

спасибо.

1 Ответ

3 голосов
/ 27 апреля 2010

Вы правы, это очень субъективный вопрос, однако я бы, вероятно, использовал сочетание двух ваших вариантов.

У вас есть класс (скажем, Helper), который имеет __call() (и / или __callStatic(), если вы используете PHP 5.3+) магические методы , когда не определен [статический] метод называется он загрузит соответствующий вспомогательный файл и выполнит вспомогательную функцию. Имейте в виду, что включение файлов снижает производительность, но я полагаю, что вы получаете выгоду с точки зрения организации файлов, что намного превышает крошечный удар по производительности.

Простой пример:

class helper {
    function __callStatic($m, $args) {
        if (is_file('./helpers/' . $m . '.php')) {
            include_once('./helpers/' . $m . '.php');
            return call_user_func_array($m, $args);
        }
    }
}

helper::isFilePhp(/*...*/); // ./helpers/isFilePhp.php
helper::getCurrentFolder(/*...*/); // ./helpers/getCurrentFolder.php

Вы можете дополнительно оптимизировать этот фрагмент и даже иметь несколько типов помощников (папка, файл) и т. Д., Добавив магический метод __call[Static]() к каждому из ваших классов и реализовав некоторую логику в структуре папок / файлов вашего вспомогательные файлы / функции.

...