SPL, Автоматически загружающий лучшие практики

Текстовый файл, который открывается, является сводкой текущей операции фиксации. Фиксация мерзавца бросает Вас в этот файл, таким образом, Вы могут добавить сообщение о фиксации наверху файла. Как только Вы добавили, что Ваше сообщение просто сохраняет и выходит из этого файла.

существует также "-m, сообщение" включают эту команду, которая позволяет Вам добавлять сообщение о фиксации на командной строке.

5
задан hakre 18 April 2013 в 15:47
поделиться

2 ответа

One thing that the Habari project autoloader does that's interesting is cache the whole class file list in memory so that it's not doing disk searches for the files every time a class is requested.

Essentially, you declare a static inside your __autoload() that holds an array of all of the class files, indexed by the class that will cause them to load. For example, the code would use Dir or glob() to generate this static array:

$class_files = array(
  'user' => '/var/www/htdocs/system/classes/user.class.php',
);

Then you simply include $class_files[$class] to get the correct file. This is nice and speedy because it gets the catalog from the disk all at once, rather than generating the list or searching for a specific filename each time a new class is referenced. (You would be surprised how much of a speed difference it makes.)

If the class name isn't a key in the array, you can throw a custom exception or generate a stub/mock class to return. Also, if you check out the Habari system autoloader, you'll see that Habari implements __static() in classes that are autoloaded, which is like a constructor for static classes.

include_once() is to be avoided, and the @ operator is unnecessary if you've checked for the file to include.

7
ответ дан 14 December 2019 в 04:41
поделиться

http://www.johndcook.com/regex.html дает достойный пример

И, во что бы то ни стало, упростите свое выражение:

^([^-]+)\s*-\s*duration\(([0-9]+)
  • начните с начало строки
  • захватить все символы, ведущие к первому -
  • убедитесь, что есть -
  • пропустить пробел
  • убедитесь, что слово "duration (" Оператор -> передает активатор (слева) в качестве первого аргумента подпрограммы. Итак, эта строка получает имя класса из списка аргументов. И да, оно вам действительно нужно.

    .3. Как массив входных данных становится хешем % params ? my% params = @_;

    Назначение хешу выполняется в контексте списка, при этом пары элементов списка сгруппированы в пары ключ / значение. Итак, % foo = 1, 2, 3, 4; создает такой хеш, что $ foo {1} == 2 и $ foo {3} == 4 . Обычно это делается для создания именованных параметров для подпрограммы. Если подпрограмме передается нечетное количество аргументов, будет сгенерировано предупреждение, если предупреждения включены.

    .4. Что означает 'my $ self = {}; `do?

    Эта строка создает анонимную ссылку на хэш и присваивает ее переменной с лексической областью видимости $ self . Ссылка на хэш будет хранить данные для объекта. Обычно ключи в хэше имеют однозначное соответствие атрибутам объекта. Итак, если у класса Foo есть атрибуты 'size' и 'color', если вы проверите содержимое объекта Foo, вы увидите что-то вроде $ foo = {size => 'm', color => 'black'} ; .

    .5. Учитывая $ self -> {'High'} = $ params {'High'}; откуда берется $ params {'High'} ?

    Этот код полагается на аргументы передаются в новый . Если новый назывался как Foo-> new (High => 46) , тогда хэш, созданный согласно вопросу 3, будет иметь значение для ключа High (46). В этом случае это эквивалентно $ self -> {High} = 46 . Но если метод вызывается как Foo-> new () , то значение не будет доступно, и у нас будет $ self -> {High} = undef .

    .6 . Что делает bless ?

    bless берет ссылку и связывает ее с конкретным пакетом, чтобы вы могли использовать ее для вызова методов. С одним аргументом ссылка ассоциируется с текущим пакетом. С двумя аргументами второй аргумент указывает пакет, с которым нужно связать ссылку. Лучше всегда использовать форму с двумя аргументами, чтобы ваши конструкторы могли быть унаследованы подклассом и по-прежнему функционировали должным образом.

    Наконец, я '
    Получите представление для аннотации с помощью метода MKMapView - (MKAnnotationView *) viewForAnnotation: (id ) annotation и установите для него новое изображение.

    Edit: Пытался сделать это я и этот подход у меня отлично сработали:

    //  Function where you got new image and want to set it to annotation view
    for (MyAnnotationType* myAnnot in myAnnotationContainer){
        MKAnnotationView* aView = [mapView viewForAnnotation: myAnnot];
        aView.image = [UIImage imageNamed:@"myJustDownloadedImage.png"];
    }
    

    После вызова этого метода все изображения аннотаций были обновлены.

    Не думаю, что есть ответ "полегче". Существуют веские причины , почему вам не нужен служебный класс, заполненный статическими методами.

    Короткий ответ заключается в том, что в объектно-ориентированном мире вы должны использовать объекты и все хорошее, что с ними связано (инкапсуляция, полиморфизм)

    Полиморфизм

    Если метод расчета расстояния между генами варьируется , вы должны примерно (более вероятно, Стратегия ) иметь класс гена для каждого варианта. Инкапсулируйте то, что меняется. В противном случае вы получите несколько «если».

    Открыто для расширения, Закрыто для модификации

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

    В этом случае вам следует добавить новый класс Gene, а не изменять код, написанный в #geneDistance

    Скажите, не спрашивайте

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

    Тестируемость

    Статические методы вполне могут быть легко протестированы изолированно, но в будущем вы будете использовать этот статический метод в других классы. Когда дело доходит до тестирования этих классов на изоляцию, вам будет сложно это сделать. Или, скорее, нет.

    Я позволю Миско высказать свое высказывание, которое, скорее всего, лучше того, что я могу придумать. w = 2

1
ответ дан 14 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: