1. PHP / Говнокод #23448

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    <?php
    class SmsController extends Controller
    {
        protected static $currentYear;
    
        public static function currentYear()
        {
            if (is_null(self::$currentYear)) {
                self::$currentYear = date('Y');
            }
    
            return self::$currentYear;
        }
    ?>

    :-D

    Запостил: FireDemonru, 24 Октября 2017

    Комментарии (46) RSS

    • Breaking News! Проклятие ленивой инициализации теперь и в PHP!
      Ответить
      • поверх этого, меня постоянно забавляет тот факт что это код который парсится/выполняется (статистически/ассимптотически) один раз на каждое показывание странички. таже х-ня и с жабоскриптами. а как посмотришь на масштаб и размах...
        Ответить
        • на каждое?
          а он не умеет pyc как питон?
          Ответить
          • Не умеет. Но тем не менее ситуации "каждый раз парсится" можно избежать. Тот же FPM, ЕМНИП, умеет кешировать пыхобайткод.
            Ответить
            • См. ниже. Байткод кэшируется сторонними расширениями (начиная с версии 5.5, opcache стали поставлять в стандартном комплекте).

              FPM — это средство для автоматического запуска процессов при использовании FastCGI.
              Ответить
        • Сейчас PHP поставляется с Opcache (раньше были сторонние Xcache и APC) — при первом запуске скрипт компилируется в байткод (да, у PHP есть собственный байткод), а при последующих байткод берётся из кэша (если исходник не изменился И если эту позицию не вытолкнули из кэша из-за нехватки места).
          Ответить
          • в курсе (включая фачебукову компиляцию пыха в нативный код). но это очевидно костыль. весь современный интернет слегка попахивает.
            Ответить
            • Вообще попытка писать полноценные приложения на шаблонизаторе напоминает шахматы на sed.
              Ответить
              • ... но на жабоскрипте - замена тага marquee - это имеет еще меньше смысла. гугл не от хорошей жизни пытается (или уже пытался?) дарт толкать. с другой стороны, запускать на компе приложения вот так просто слитые с сети - без каких либо проверок/этц или даже подтверждения пользователем - это еще хуже чем на шаблонизаторе писать. но это уже стало нормой вещей.
                Ответить
                • >> жабоскрипте - замена тага marquee
                  черт! это лучшее определение JS какое я когда либо слышал!!
                  Ответить
                  • Когда кто-то будет говорить "JS - говно", буду теперь ссылаться на это определение. Мультипарадигменная marquee с ЯВУ, ФВП, ПОП, DOM, JSON, ЁПРСТ - это вам не какой-то говноязык.
                    Ответить
              • Чистым шаблонизатором был PHP/FI. С тех пор язык стал солиднее, хотя и остался неуклюжим.

                От приложений для node.js так же пахнет, хотя JS шаблонизатором никто не считает.
                Ответить
            • «Узкое место» PHP — это обнуление контекста после каждого запроса, как во времена CGI (даже если реально используется FastCGI).

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

              Так что обычно, если нужно хранить контекст, используют расширения. При работе PHP в режиме FastCGI (или в режиме модуля Apache или IIS) память расширений сохраняется между вызовами. На этом и основаны всякие memcache.
              Ответить
              • Ну справедливости ради надо сказать что там есть сессии конечно. И memcached всякие.

                Но вот работать в фоновом режиме (как в ASP.NET или Servlets) он не может, потому все прикручивают к нему всякий там cron. С другой стороны от этого он stateless, что может и не всегда плохо, а для супер-пупер хайлоада наверное даже полезно.
                Ответить
                • > как в ASP.NET или Servlets
                  Как и в Ruby и в node.js
                  Ответить
                • На самом деле вреда, пожалуй, больше, чем пользы.
                  Ответить
              • reactphp на удивление дохуя на ноутбуке на хеллоу-ворлде показывал, больше тысячи запросов в сек. Но осбый цимес в том, конечно, что это имитация ноды через php, это как уезжать из россии в поисках будущего и обосновываться в казахстане
                Ответить
              • > Пэхапэшный скрипт теоретически можно запустить «в режиме демона», [...] вероятно, потому, что диспетчер соединений из PHP так себе и большой нагрузки не выдержит

                нет, интерфейс там FastCGI и говорит по нему сервак. проблемы:

                (1) в пыхе GC почти никогда не запускается. и он IIRC говно.

                (2) это работает нормально только с одной php страничкой. можно впихнуть "селектор" странички параметром с внутренним диспатчем, но тогда еще быстрее натыкаешься на (1).

                если не ошибаюсь, еще была проблема что такой демон может быть только один. (и много-поточностью в пыхе ниразу не пахло.) со всеми вытекающими.
                Ответить
                • *такой демон может быть только один на страничку.
                  Ответить
                • > нет, интерфейс там FastCGI

                  Нет, FastCGI — это если мы не извращенцы. А если мы извращенцы, то гугли про reactphp, который уже упомянул Fike, или смотри вот эту статью:
                  http://kvz.io/blog/2009/01/09/create-daemons-in-php/
                  Ответить
                  • P.S. А нет, в той статье только про демонизацию скрипта. А про поднятие сервера из PHP тут:
                    http://php.net/manual/ru/function.socket-accept.php

                    Но да, этим никто не пользуется, потому что «в пыхе GC почти никогда не запускается». Если этим активно пользоваться, пых будет жрать оперативку и тормозить.
                    Ответить
                    • > жрать оперативку
                      Можно запускать детей, заставлять их работать и убивать через десяток-другой запросов...
                      Ответить
                      • Первый апач так делал: нафоркивал детей, они обслуживали запросы и умирали через MaxRequestsPerChild.

                        А потом в него завезли потоки.
                        Ответить
                • Я забыл про ещё один вариант. В PHP 5.4 появился встроенный HTTP-сервер для неизвращенцев, который позволяет исполнять классические php-скрипты, но при этом обходиться без Apache/nginx впереди. Однако, при запуске он пишет что-то типа: «Don't use on production servers». Короче, только для тестов.
                  Ответить
        • > таже х-ня и с жабоскриптами.
          Не совсем так. PHP слаб и умирает так же быстро, как и в ранние годы.
          JS окреп и пропитал собою веб-приложения. Почта, мессенджеры и соцсети могут жить в наших сердцах браузерах долгое время без обновления страницы.

          Кстати, популярные сайты обрабатывают корректно ситуацию, когда они пару недель назад обновились, а у пользователя в браузере вкладка всё ещё не обновилась?
          Ответить
          • У меня есть подозрение, что владельцы популярных сайтов такую ситуацию не берут в расчёт.

            «Если что-то перестало работать, нажмите F5 (или Ctrl+F5)».
            Ответить
            • > У меня есть подозрение, что владельцы популярных сайтов такую ситуацию не берут в расчёт.
              Это не так. Как минимум vk front-end developers это учитывают при разработке.
              На Хабре когда-то читал об этом.
              Ответить
              • То-то у меня контач стабильно начинает сыпать красненькими сообщениями, если несколько суток не обновлять страницу.
                Одно дело писать код и совсем другое писать об этом на хомячкабре.
                Ответить
                • Несколько суток не обновлять страницу не обязательно. Иногда, когда я захожу в ВК из приватной вкладки (т. е. с пустым кэшем), он тоже сыпет красненькими сообщениями, которые пропадают после обновления страницы.

                  Никакой закономерности обнаружить мне не удалось. ВК может несколько месяцев не показывать ни одного красненького сообщения, а потом в какой-нибудь день засыпать ими.
                  Ответить
          • >>JS окреп и пропитал собою веб-приложения.
            Если бы только веб...
            Ответить
            • Server side считается вебом?
              Ответить
              • Конечно считается.

                Но молодых людей, жующих «Ригли Сперминт», можно встретить где угодно.
                Люди десктоп пишут на JS, мобил пишут на JS, ну фу такими быть!!
                Ответить
          • > Кстати, популярные сайты обрабатывают корректно ситуацию, когда они пару недель назад обновились, а у пользователя в браузере вкладка всё ещё не обновилась?

            хром не знаю - но мозилла все еще лажается. ирония: лажается даже на ихней местной багзилле.

            гугло/этц приложения мне кажется эту ситуацию детектят и специально обрабатывают. но весь остальной веб все еще спотыкается на аггрессивном кэшировании.
            Ответить
    • > SmsController
      > $currentYear

      ...
      Ответить
      • там еще есть поле со списком штатов США и функция для поиска подстроки в в строке. Просто не видно в примере
        Ответить
    • Сейчас прибежит очередная битрикс-макака и начнёт объяснять, что мы не с того смеёмся, а на самом деле смешно тут то, что в битриксе уже есть такой же смс контроллер искаропки, а автор нагородил никому не нужный велосипед...
      Ответить
    • Это не Bitrix :) это самописная оболочка к Goip
      Ответить
    • Ребенку рассказали про лези, и так хотелось его попробовать, чтоб как у больших, да?
      Ответить
      • Нет ничего более милого, чем стая пыхомакак, увлеченных оптимизацией.
        Они могут часами спорить, что быстрее, empty() или strlen(); дрочить на бенчмарки минорных версий одного и того же говнофреймворка; лениво парсить даты и конкатенировать строки; инлайнить функции и инклюды; экономить на валидации входных данных, при этом случайно забывая про SQL-запрос в ебучем цикле.
        Ответить
        • > [...] при этом случайно забывая про SQL-запрос в ебучем цикле.

          что бы бенчить, думать не надо. через какое-то время народ и отвыкает.
          Ответить
        • забывая что у них там left outer join по лайку
          Ответить
    • phpdoc не хватает еще
      Ответить
    • А что не так? Может это контроллер для NASA, где критично, чтобы функция возвращала одно и тоже в пределах 1 запуска ракеты? А вдруг после выхода на орбиту Марса date вернёт другое число?
      Ответить
      • А этот smsController отправляет сообщение президенту США, мол, полёт нормальный?
        Ответить
    • Меня смущает закрытый ?> с незакрытым }
      Ответить

    Добавить комментарий