• Объясните отрезок кода php?

    gzhegow
    @gzhegow
    Думал, стану умнее, когда адаптируюсь, но нет
    <?php
            /** @var bool */
            public $exit = true;
            /** @var bool */
            public $exitFullUsage = false;
            /** @var bool */
            public $help = true;
            /** @var bool */
            public $optionsFirst = false;
            /** @var ?string */
            public $version;


    это объявлены свойства, которые можно будет получить через $object->{ $name }; (потому как они помечены как публичные)
    для удобства работы в PhpStorm и чтения указаны их типы данных, когда часто работаешь с кодом позволяет не тратить время на то, чтобы долго не вкуривать и не разбираться. Достаточно знать что там лежит.

    <?php
          public function __construct($options=array())
            {
                foreach ($options as $k=>$v) {
                    $this->$k = $v;
                }
            }


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

    Но код косячный потому что пхп позволяет обьявлять свойства динамически. То есть даже если поля нет, его можно передать и оно появится. Надо проверять еще
    <?php
    if (! property_exists($this, $k)) throw new \Exception('Нет свойства');
    Ответ написан
  • Почему сайт vuejs.org не SPA?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Как бы кто там ни пытался говорить что поисковики с ним дружат - это не так, совсем не так
    Ответ написан
  • Хорошо ли хранить serialize в БД?

    firedragon
    @firedragon
    Senior .NET developer
    Лучше сериализуйте в json https://www.php.net/manual/ru/function.json-encode.php
    https://www.postgresql.org/docs/9.4/datatype-json.html

    Некоторые базы данных (почти все) позволяют хранить json внутри специального типа поля и использовать их при запросах.

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

    @spaceatmoon
    https://p1d1.blogspot.com
    Короче пофиг на архитектуру. Назовите осмысленно файлы Vue и у сё. Это же фронтенд.
    Ответ написан
  • Какой валидатор использовать?

    @IgorNoskov
    https://github.com/rakit/validation Подход как у Laravel, пользуюсь на одном проекте, удобно.
    Ответ написан
  • Как вытащить массивы из массива массивов php?

    @Randewoo
    Потому что переменная $v содержит в себе еще один массив.
    <?php
    $arr = [
        [6, 1, 13, 7],
        [56, 23, 12, 78],
        [43, 288, 78, 6],
        [77, 12, 65, 83],
    ];
    foreach ($arr as $item) {
    	foreach ($item as $value) {
    		echo "{$value}\t";
    	}
    	echo "\n";
    }
    ?>
    Ответ написан
  • Как написать функцию транслита?

    l3ftoverz
    @l3ftoverz Куратор тега PHP
    Люблю Финский металкор
    Лучшим вариантом является использование PHP Intl Extension.
    Там всё сделается "как надо".

    <?php
    $transliteratedString = transliterator_transliterate('Russian-Latin/BGN', $cyrillicString);


    Ещё можно использовать iconv:
    <?php
    $trstr = iconv(<your encoding here>, "ISO-8859-1//TRANSLIT", $src_str)
    Ответ написан
  • Приемлем ли для имен коммитов русский язык?

    @spaceatmoon
    https://p1d1.blogspot.com
    Только русские имена коммитов, ничего не слетает уже много лет. Ветки и теги естественно на английском языке.

    Лично я пробовал делать имена коммитов на "тру инглишь". Однако страдало время написания и осмысления дерева коммитов. Родной язык на то и родной, он имеет смысловую окраску, а английский для меня сухой как солома. Даже матерные слова никак не окрашивают текст, просто слова.

    Вы сможете это адекватно перевести сходу это?
    Добавил возможность вписать код или номер телефона друга при редактировании поста

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

    И отвечая в конце на ваш вопрос - да. В какой-то момент это не слетит и не поломатеся, иначе git'om никто бы в проде не пользовался.
    Ответ написан
  • Где в Laravel лучше задать глобальную переменную?

    aleksejjjj
    @aleksejjjj
    Используйте конфиги, забудьте про глобальные переменные. Хелпер config

    // Файл /config/custom.php
    return [
        // Ваши значения по-умолчанию
        'default' => '123',
    ];
    
    // В контроллере
    config(['custom.default' => '321']);
    
    // Во вьюхе
    {{ config('custom.default') }}
    Ответ написан
  • MVC реализованый через Controller, Entity, Repository, Service это как?

    gzhegow
    @gzhegow
    Думал, стану умнее, когда адаптируюсь, но нет
    Controller
    -- ProductController
    -- UserController
    spoiler
    ну тут ты все знаешь, это класс где в виде функций хранятся частные случаи твоей программы, или по-русски - страницы сайта. здесь формируется массив исходных данных и разбирается GET/POST/RAW. Здесь прогоняется валидация. И полученный обьект или массив идет дальше в сервис

    Model
    -- Entity
    ---- ProductEntity
    ---- CategoryEntity
    spoiler
    это твоя модель к которой ты привык. Но в ней нету никаких ->save(), ->insert() и так далее. Просто пустой обьект со свойствами и функциями, которые эти свойства позволяют установить и получить. в случае с фреймворками - энтити является прослойкой для ActiveRecord. То есть везде в коде ходят Entity. А у каждой энтити есть внутри AR-обьект (обернуто)

    -- Repository
    ---- ProductRepository
    ---- UserRepository
    spoiler
    это класс, который умеет брать пачку Entity и сохранять их в базу. Или наоборот - запрашивать из базы, отдавая тебе пачку Entity. В простом случае запросы в базу лежат прямо в нем. В чуть более сложном случае он является прослойкой, которая говорит Адаптеру - делай. Говорят что все возможные фильтры и сортировки в виде кусочков, которые можно добавить к построителю запросов тоже хранятся здесь. Соответственно для файлов это придется делать как-то по-другому, у нас ведь нету "запроса к файлу", есть только открыть, перейти на строку или считать целиком

    ---- Adapter
    ------ MysqlAdapter - сохраняет и получает только в базу
    ------ FileAdapter - сохраняет и получает только в файл
    ------ ElasticSearchAdapter - сохраняет и получает только в индекс эластика
    ------ ... и тд
    spoiler
    это кусок репозитория, еще один обьект, который знает КАК ИМЕННО нужно сохранить то, что сохраняет репозиторий. Или как именно получить.

    -- Service
    ---- ProductService
    ---- UserService
    spoiler
    это класс, который умеет делать из входящих, уже проверенных валидатором данных = Entity. На вход кидаешь объект запроса или массив сложный большой, а в нем, под капотом в функциях разбираешь его до тех пор пока не получится массив Entity или одна Entity. В случае с запросом данных, а не их созданием - отсюда вызывается репозиторий, чтобы получить Entity. Когда Entity создан - тут же репозиторий вызывается, чтобы его записать. Сюда же лягут всякие registration() для юзера например, или методы запросов пачки или одной записи с учетом того, что пользователь может захотеть не все поля, или задать сортировку

    View
    spoiler
    тут все ясно. в простом случае - это просто файлик шаблона. в более сложном - класс, который на вход принимает данные от сервиса, на выход отдает их в виде JSON или Хтмл, или Xml (может оборачивать в постраничную навигацию по дороге - но это в каком-то смысле и репозитория задача, когда у тебя постраничная от хранилища зависит), потом программа сделает (new ProductsView($data))->send(); и отдаст их пользователю, проставив заголовки что это там JSON или XML

    Component
    spoiler
    а тут всякие штуки работающие как мини-программы в программе. Авторизация. Языки и переводы. Если совсем ударится в правильность - то этой папки нет, так как каждая мини-программа это по сути сайт с собственной базой данных. И языки тоже могут иметь модель, репозиторий и способы быстро их получать из ElasticSearch


    ps.
    Но сколько бы ты не читал моё понимание, архитекторы все равно тебе скажут, что ты не так понял, и иди ещё почитай. Это бесконечный цикл о том как ты пытаешься доказать архитектору, что ты тоже архитектор, а он тебе говорит, что ты ещё молокосос (ведь рынок - это сафари - или ты гоняешь, или тебя)

    Хочется верить что наступят времена когда вместо "невозможно" начнут применять "интересно, как это возможно" и вместо "да ты гонишь" начнут применять "а не мог бы ты рассказать почему это работает", но за 2000 лет ещё не навоевались.
    Ответ написан
  • Почему перевод через Yandex translate API намного хуже, чем обычный перевод через стандартную страницу переводчика?

    dr_foam_rubber
    @dr_foam_rubber
    Столкнулся с такой же проблемой. Вот, что ответила поддержка:
    Различие в переводах на сервисе и через API существует потому, что на сервисе используется гибридный перевод (нейроперевод + статистический фразовый), а в API — только статистический фразовый.
    В платной версии API Яндекс.Переводчика на платформе Яндекс.Облако используется такой же перевод, как и на сервисе.
    Подробнее об этом можно почитать тут: https://cloud.yandex.ru/services/translate
    Ответ написан
  • Правда ли, что сейчас так сложно найти работу?

    @IvanOne
    Я вот тоже не так давно искал работу, и я скажу так. Надо ходить на собеседования и учиться. Иногда компании пишут в требованиях какие то супер знания, а по факту пообщавшись с разработчиками на собеседовании, понимаешь что компании просто ищут человека который близок им по духу и опыту работы, при этом я не раз проходил собеседование на 'троечку', но получал оффер, не думаю что там люди оценивали только мои знания алгоритмов или как я пишу голый sql через orm. Возможно это только мое мнение. И кстати насчет курсов они не так уж плохи иногда, просто нужно искать. Я недавно нашел отличный курс по определенному набору технологий, да там по большей части пересказ документаций, но если видосом воспринимается лучше то это хороший инструмент, плюс делятся практиками опытом, но далеко не все курсы такие.
    Ответ написан
  • Неверная выборка из массива по датам. Почему?

    s_panteleev
    @s_panteleev
    25 yo, Yaroslavl
    Как то так

    <?php
    
    $START_DATE = "01.04.2019";
    $END_DATE = "31.04.2019";
    
    $object_list = [
        [
            "num" => "0003000000006739",
            "qr_code" => "18826807734421200000",
            "entry_date" => "23.03.2019 16:43",
        ],
        [
            "num" => "0003000000006739",
            "qr_code" => "18826807734421200000",
            "entry_date" => "23.04.2019 16:43",
        ],
        [
            "num" => "0003000000006739",
            "qr_code" => "18826807734421200000",
            "entry_date" => "23.05.2019 16:43"
        ]
    ];
    
    
    $ts_from = strtotime($START_DATE);
    $ts_to = strtotime($END_DATE);
    
    foreach ($object_list as $item) {
        $ts = strtotime($item['entry_date']);
    
        if ($ts > $ts_from && $ts <= $ts_to) {
            echo '<pre style="color: red;">', print_r($item, true), '</pre>';
        }
    }

    Ответ написан
  • Стоит ли начинать с JavaScript?

    Zoominger
    @Zoominger
    Сись админ
    Нет. Будете толкаться с толпой таких же джунов, моля о хоть какой-нибудь работе, хотя бы за доширак.
    Кроме того, это слишком примитивный язык и в данном случае это большой минус.
    Ответ написан
  • Стоит ли начинать с JavaScript?

    DarthWazer
    @DarthWazer
    Как спрашивать: https://habr.com/ru/post/460221
    Здравствуйте.
    Нет, не стоит. Начните с Python или Java. Говорю как человек начинавший с JS.
    Почему - расписывать не буду, так как не будучи программистом - не поймете.
    Ответ написан
  • Стоит ли начинать с JavaScript?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Самая большая беда JS в том, что это слишком странный язык. Он во многом ведёт себя неочевидно, неинтуитивно и не так, как ведут себя другие языки. Соответственно, потом может быть сложнее с изучением других языков.
    Ответ написан