• Использование реестра через wrapper без синглтона в PHP?

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

    function Reg() {
      static $registry = null;
      if(null === $registry) {
        $registry = new stdClass;
      }
      return $registry;
    }
    
    Ответ написан
    7 комментариев
  • Использование реестра через wrapper без синглтона в PHP?

    den1n
    @den1n
    Не использовал бы, т.к. глобальную переменную $___REGISTER можно случайно или намеренно изменить, а потом искать, где «собака порылась».
    Если очень хочется использовать stdClass в качестве контейнера в реестре, то я бы предложил поступить так:
    class Registry extends stdClass {
        private static $instance;
    
        private function __construct () {}
        private function __clone () {}
    
        public static function me ()
        {
            if (self::$instance === null)
                self::$instance = new self;
            return self::$instance;
        }
    }
    
    # Использовать так
    Registry::me()->config = new stdClass;
    Registry::me()->config->host = 'habrahabr.ru';
    Registry::me()->config->admin = 'admin@habrahabr.ru';
    Registry::me()->config->name = 'Хабрахабр';
    
    Ответ написан
    5 комментариев
  • Как запаролить блог на wordpress?

    Anastasia_K
    @Anastasia_K
    а через htaccess не пробовали закрыть блог?
    Ответ написан
    Комментировать
  • [Решено] PHP и потеря сессии при session_regenerate_id()

    @Nc_Soft
    а для чего вообще session_regenerate_id использовать?
    Ответ написан
    1 комментарий
  • Какую коммерческую CMS интернет-магазина выбрать?

    un1t
    @un1t
    Интеграция с 1с это не более 5-10% от разработки интернет-магазина. Не стоит отказываться от CMS только из-за того, что в ней по умолчанию нет интеграции с 1С.

    Я работал и с платными и бесплатными CMSками, для разработки в том числе и интернет магазинов. У платных в техническом плане нет абсолютно никаких преимуществ. Тот же битрикс почти во всем проигрывает друпалу и в скорости и в качестве кода. У друпала качество тоже не очень, но у битрикса совсем плохо. Волосы дыбом встают. Битрикс работает крайне медленно и невероятно сильно грузит базу.

    В идеале разработать CMS под проект. Для этого нужны хорошие разработчики. Зато будет летать, жрать мало памяти и интерфейс заточенный под вас.
    Ответ написан
    1 комментарий
  • Какую коммерческую CMS интернет-магазина выбрать?

    try4tune
    @try4tune
    Выбирайте Magento. Если цель — именно магазин — лучше не найдете.
    Ответ написан
    3 комментария
  • Статьи про кэширование в PHP

    @immaculate
    Программист-путешественник
    Кэширование — это очень сложно. Если у вас вносятся изменения в БД, то появляется масса проблем с инвалидацией. Инвалидацию очень легко забыть где-нибудь вставить, даже если с этим помогает фреймворк/ORM.

    Все «полностью автоматизированные» решения по кэшированию, создавали гигантские проблемы, потому что в каких-то случаях не инвалидировали кэш, когда нужно. Допустим, есть объект Profile со свойством balance. Пользователь покупает услуги, генерируется invoice, и либо баланс показывается закэшированный, либо инвойс не появляется в списке закэшированных инвойсов. Оба случая вызывают неистовое негодование пользователей, поверьте моему опыту.

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

    К тому же, возникает вопрос эффективности. Инвалидировать слишком часто — теряется эффективность, приходится слишком часто обновлять данные из базы. Инвалидировать слишком редко — пользователи жалуются на устаревшие данные.

    С тяжелыми запросами тоже все сложно. Допустим, есть очень тяжелый запрос, который необязательно инвалидировать, следовательно можно легко и просто закэшировать. Но первому пользователю все равно придется ждать, пока он завершится. А если результат выполнения разный для разных пользователей, то каждому придется подождать как минимум один раз. Никому это тоже не понравится.

    В общем, готовых шаблонов на все случаи жизни нет. Только для read-only данных, и то с ограничениями. Задумываться о кэшировании желательно с самого начала реализации проекта, потом будет сложнее.
    Ответ написан
    Комментировать
  • Комплексный учебник по php5+mysql+js(ajax)

    taliban
    @taliban
    php программист
    Все книги 3 in 1 будут хуже чем 3 кники каждая на свою тематику. Я советую найти 3 книги: пхп5, мускул5 и жс и просто все три прочитать, да, это займет больше времени, но зато так будете наверняка в теме.
    Ответ написан
    Комментировать
  • Альтернативы DbSimple

    pav
    @pav
    А есть замеры/цифры которые доказывают что DbSimple будет являться узким местом в нагруженных проектах?
    Ответ написан
    1 комментарий
  • Что выбрать: $someVar или $some_var?

    Alroniks
    @Alroniks
    MODX Джедай, работаю с Laravel
    для переменных использую camelCaps… тут пишут, что для функций лучше использовать метод с подчеркиваем, но мне он не нравится… использую camelCase и для функций.
    Ответ написан
    1 комментарий
  • Смогу ли я пробросить линк на 12 км без нарушения закона?

    nicolnx
    @nicolnx
    0) в целом это конечно нарушение. нужна лицензия и регистрация базовой станции. Саму станцию зарегистрировать — недорого, а вот лицензия стоит сотни денег.
    1) укрчастотнагляд вас не тронет до тех пор пока вы никому мешать не начнете. перед тем как включать, просканьте эфир на предмет наличия в главном лепестке антенн других беспроводных станций. лучше становиться в 3-4 каналах от. Линк ставьте в bridge, анонс essid отключите.
    2) настроить 2 тарелки «морда в морду» на дистанции 12 км — занятие очень увлекательное, думаю пара часов на крыше вам обеспечена как минимум (и не факт что выйдет) — у тарелок диаграмма направленности чудная.
    3) учитывая то что железо вы берете дешевое, а путь сигналу предстоит неблизкий, не советую увлекаться длиной ВЧ фидера. в идеале вообще точку доступа подключить к антенне полуметровым пигтейлом, дальше АР — в гермобокс и под антенну. Питание по витой паре.
    Так шансы на какой-то там мегабит-два в принципе есть если не купите откровенное говно а эфир не очень засран. Учитывая пригород, может и повезет.
    Да, и смотрите чтобы там деревьев не было на трассе — сейчас зима, они голые — еще так сяк, а летом когда зазеленеют — кина не будет даже с полуваттным усилителем.

    p.s. в моей практике были случаи когда далекий линк в 5.5М показывал гораздо лучшие результаты нежели в 1-2М (видимо за счет другой модуляции, глубоко не копал. Попробуйте)
    Ответ написан
    Комментировать
  • 1С8 -> php сайт?

    eternals
    @eternals
    1. Реально. Но лучше выгружать из 1С на сайт.
    2. Формат базы данных лучше не трогать по целому ряду соображений.
    3. Да, реально. Например, в 1С-Битрикс выгружается из «1С: Управление торговлей». Можно воспользоваться этим механизмом.
    4. Как тупой, но простой вариант: 1С умеет выгружать данные в xml в директорию периодически. Можно оттуда читать.
    Ответ написан
    Комментировать
  • Работа с базой в ООП-приложениях на php 5.3

    SwampRunner
    @SwampRunner
    Пользуюсь pyha.ru/go/godb/
    Ответ написан
    Комментировать
  • PHP и быстрая база данных в файлах

    SwampRunner
    @SwampRunner
    mysql, для удобного и защищенного использования можно использовать godb pyha.ru/go/godb/
    Ответ написан
    Комментировать
  • Как правильно настроить mod_rewrite?

    m00t
    @m00t
    Я бы на вашем месте сделал по-другому.
    Парсил бы строку URI не в htaccess, а в index.php. А все запросы к несуществующим файлам передавал бы неизменными на index.php. Так делают во всех фреймворках сейчас. Тогда и _GET параметры все останутся, если надо. Пример htaccess (смотрите на последние три условия):
    github.com/kohana/kohana/blob/3.0.x/example.htaccess
    Потом его можно узнать в скрипте примерно так:
    github.com/kohana/core/blob/3.0.x/classes/kohana/request.php#L239
    и распарсить уже как надо на свои query, id и microid.
    Ответ написан
    Комментировать
  • Как стать фрилансером?

    @Xarakternik
    ни дизайном, ни версткой ни программированием на php/js/ryby

    ни дизайном, ни версткой, ни программированием на php/js/ruby

    А название, блин, кричащее.
    так и нарывается ответ:
    — Как стать фрилансером?
    — Вы — уволены!
    Ответ написан
    Комментировать
  • JavaScript: объясните return в конструкторе

    apangin
    @apangin
    Для простоты понимания примеры можно сократить до следующих.
    Первый: function Test() { this.qqq = a; }
    Второй: function Test() { return {qqq: 'a'}; }

    Теперь обратимся к спецификации ECMA-262, пункт 13.2.2. [[Construct]]

    When the [[Construct]] property for a Function object F is called, the following steps are taken:
    1. Create a new native ECMAscript object.
    2. Set the [[Class]] property of Result(1) to «Object».
    3. Get the value of the prototype property of the F.
    4. If Result(3) is an object, set the [[Prototype]] property of Result(1) to Result(3).
    5. If Result(3) is not an object, set the [[Prototype]] property of Result(1) to the original Object prototype object as described in 15.2.3.1.
    6. Invoke the [[Call]] property of F, providing Result(1) as the this value and providing the argument list passed into [[Construct]] as the argument values.
    7. If Type(Result(6)) is Object then return Result(6).
    8. Return Result(1).

    Разгадка кроется в двух последних строках: если функция возвращает объект, то результатом работы конструктора считается этот объект, если же функция возвращает что-либо другое (либо ничего не возвращает), результатом работы конструктора считается новый объект, созданный на шаге 1.
    Ответ написан
    1 комментарий
  • Много картинок в одной директории?

    Bambr
    @Bambr
    В стародавние времена был придуман способ хранить множество файлов по такому принципу:
    1) было: /files/abcdefg.gif
    2) стало: /files/a/b/c/abcdefg.gif
    Глубину вложенности больше 3 на практике ни разу не видел, как и задержек. Вот по первому рецепту — задержки были, но тогда была еще ext2 и несколько тысяч файлов в папке. Точные цифры, к сожалению, не помню за давностью лет.
    Ответ написан
    Комментировать
  • Лишняя запятая в JS

    MTonly
    @MTonly
    Веб-разработчик с 2002 года
    С массивами-то (Array) в IE (даже 6) вроде такой проблемы нет, а что касается объектов, используемых в качестве ассоциативных массивов, начиная с IE8 это уже исправлено:
    var obj = {
    	'lorem' : 'first',
    	'ipsum' : 'second',
    };

    Итого, прав программист, но из-за IE6-7 пока приходится делать неудобно — без запятой после последнего элемента.
    Ответ написан
    Комментировать