• Как работать с выгоранием?

    php666
    @php666
    PHP-макака
    Как то можно заранее выявить такую компанию с таким же отношением и организацией, чтоб не попасть на те же грабли?
    Выбор правильного места работы или как работая программистом не умереть от инфаркта - я попытался для таких бедолаг, как ты, я и других написать некий мануал. Прочтите его "от и до". Там мой опыт за многие годы.

    Как восстановиться, что бы профессия на которой оно случилось не вызывала негатива?
    выход только один - искать хорошее место работы, указанное в статье выше. Других вариантов просто нет. В моей жизни было два или три прецедента, когда работа (в комплексе со всеми факторами) меня просто убивала. Последний раз это случилось в 2016. Я уволился не имея за душой и гроша, с кредитом на руках. Устроился курьером на своей машине подрабатывать, за копейки. И тогда я понял одну важную вещь - работа в IT - чертовски сложна. Я, зарабатывая на хлеб и бензин, в буквальном смысле слова отдыхал за рулем, развозя грузы. Конечно, сейчас я сижу в очень хорошем месте, где я востребован как специалист, без всяких негативов. Но суть осталась - если работа не нравится, её необходимо менять. Особенно работа в IT, которая сама по себе довольно сложна (в отличие от мнения обывателей).
    Ответ написан
    Комментировать
  • Как получить данные из stdClass Object?

    php666
    @php666
    PHP-макака
    print_r ($tokenset[0]->value);
    ?
    Ответ написан
    Комментировать
  • Как манипулировать датой?

    php666
    @php666
    PHP-макака
    изучить возможности объектов для работы с датой - php.net/manual/ru/book.datetime.php
    а именно
    php.net/manual/ru/class.datetime.php
    php.net/manual/ru/class.dateinterval.php
    Ответ написан
    Комментировать
  • Как сгенерировать файл и начать автоматическую его загрузку?

    php666
    @php666
    PHP-макака
    послать соответствующий заголовок
    Ответ написан
    Комментировать
  • Как лучше организовать структуру таблицы users в mysql?

    php666
    @php666
    PHP-макака
    разделение таблицы без явной необходимости - плохо, зло, так делать не надо

    сделать 2 таблицы (в одной: login. password, status), во второй: fio, birthday, sex, ava и т п?
    и будешь ты на каждый чих делать запрос с join двух таблиц, что влечет доп (хоть и минимальные) расходы.
    Ответ написан
    Комментировать
  • Фильтрация, вопрос на засыпку?

    php666
    @php666
    PHP-макака
    На самом деле, это очень нетривиальная задача, хотя кажется, что она простая. Когда я писал свой класс для БД mysql, мне необходимо было научиться понимать, где int, а где float. Как в их естественном типе, так и в типе строки.
    Вот что вышло:

    /**
     * Проверяет, является ли значение целым числом.
     *
     * @param mixed $input
     * @return boolean
     */
    function isInteger($val)
    {
        if (!is_scalar($val) || is_bool($val)) {
            return false;
        }
    
        return isFloat($val) ? false : preg_match('~^((?:\+|-)?[0-9]+)$~', $val) === 1;
    }
    
    /**
     * Проверяет, является ли значение числом с плавающей точкой.
     *
     * @param mixed $input
     * @return boolean
     */
    function isFloat($val)
    {
        if (!is_scalar($val) || is_bool($val)) {
            return false;
        }
    
        $type = gettype($val);
    
        if ($type === "double") {
            return true;
        } else {
            return preg_match("/^([+-]*\\d+)*\\.(\\d+)*$/", $val) === 1;
        }
    }
    
    foreach ([
                 '11111111111111111', 11111111111111111, // > PHP_INT_MAX - presents in PHP as float
                 1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
                 '-2.', '-.2', null, [], true, false, 'string'
             ] as $value) {
        echo $value . ':' . gettype($value) . ' is Integer? - '  . (isInteger($value) ? 'yes' : 'no') . PHP_EOL;
        echo $value . ':' . gettype($value) . ' is Float? - '  . (isFloat($value) ? 'yes' : 'no') . PHP_EOL;
    }


    11111111111111111:string is Integer? - yes
    11111111111111111:string is Float? - no
    11111111111111111:integer is Integer? - yes
    11111111111111111:integer is Float? - no
    1:integer is Integer? - yes
    1:integer is Float? - no
    10:string is Integer? - yes
    10:string is Float? - no
    +1:string is Integer? - yes
    +1:string is Float? - no
    1.1:string is Integer? - no
    1.1:string is Float? - yes
    1,1:double is Integer? - no
    1,1:double is Float? - yes
    0,2:double is Integer? - no
    0,2:double is Float? - yes
    2:double is Integer? - no
    2:double is Float? - yes
    .2:string is Integer? - no
    .2:string is Float? - yes
    2.:string is Integer? - no
    2.:string is Float? - yes
    -2.:string is Integer? - no
    -2.:string is Float? - yes
    -.2:string is Integer? - no
    -.2:string is Float? - no // тут проблема
    :NULL is Integer? - no
    :NULL is Float? - no
    Array:array is Integer? - no
    Array:array is Float? - no
    1:boolean is Integer? - no
    1:boolean is Float? - no
    :boolean is Integer? - no
    :boolean is Float? - no
    string:string is Integer? - no
    string:string is Float? - no


    И да. Считаю, что любая т.н. "санитарная обработка" - это зло (кроме банального trim). Надо делать именно проверку данных, а любая санитария меняет данные, что не есть правильно.
    Ответ написан
    Комментировать
  • Что не так с кодом?

    php666
    @php666
    PHP-макака
    На чем стоит поработать?
    научиться писать красивый, опрятный код.

    Сейчас это - говнокод. А наиважнейшая задача программиста писать код, понятный в первую очередь, ЧЕЛОВЕКУ.

    Открой любой популярный opensource-фреймворк и посмотри, как элегантен там каждый файл кода.
    Ответ написан
  • Хотел бы узнать про логику и концепцию MVC?

    php666
    @php666
    PHP-макака
    MVC на примере автомобиля

    Потому что я не могу разобраться что значит толстый "Уродливый" Контроллер"
    Уродливый" Контроллер - это когда в нем присутствует логика, которая должна быть в моделях или в сопутствующих классах. Например, бизнес-логика или иные вычисления.
    Ответ написан
    1 комментарий
  • Работает ли автозагрузка классов, которые не используются?

    php666
    @php666
    PHP-макака
    Подгружаются ли классы HasOne, Category

    HasOne будет инстанцирован и загружен автолоадером, ведь возвращается объект этого класса.
    Category нет:
    Разрешение имен класса с использованием ::class происходит на этапе компиляции. Это означает, что на момент создания строки с именем класса автозагрузки класса не происходит. Как следствие, имена классов раскрываются, даже если класс не существует. Ошибка в этом случае не выдается.


    целесообразно с точки зрения производительности
    к производительности этот вопрос не имеет значения. не надо заморачиваться над тем, что не имеет реального смысла. весь твой вопрос к практической пользе никакого отношения не имеет.
    Ответ написан
    Комментировать
  • SQL инъекция или можно?

    php666
    @php666
    PHP-макака
    Ты запутался в sql-инъекциях и выводе данных.
    При записи надо всегда применять подг. запросы или иные обертки, препятствующие sql-инъекциям и порчи синтаксиса SQL.

    При выводе данных из БД всегда надо применять htmlspecialchars, т.к. это предотвратит и XSS и "порчу" верстки, если попадется в тексте символ <, > или кавычки.

    Перед записью в базу текст НЕ ДОЛЖЕН подвергаться никакой санитарной обработки.
    Ответ написан
    Комментировать
  • Как передать набор переменных в функцию?

    php666
    @php666
    PHP-макака
    Передача параметров в класс: массивом или через аргументы?
    Ответ написан
    Комментировать
  • Нужно ли хранить путь к картинке в БД?

    php666
    @php666
    PHP-макака
    Все имена файлов загружаем как хэш от md5 - нет ни одной причины их называть человекопонятными именами.

    Имея имя файла делаем разграничитель директорий. Например, файл называется cc49db9055039eacc73d46d10af535cc.jpeg
    Соответствунно делаем директории (если они еще не созданы) при загрузке файла - /i/800x800/c/c/4/
    Последние 3 директории - создаются автоматом при сохранении изображения. Соответсвуют первым трем буквам имени файла.

    В базе храним так:
    ID записи картинки
    ID сущности
    cc49db9055039eacc73d46d10af535cc.jpeg - имя файла
    2018-10-31 12:03:27 - дата загрузки

    По имени файла всегда можно получить путь:

    <?php
    class DirectoryGenerator
    {
        /**
         * Имя файла.
         *
         * @var string
         */
        private $file_name;
    
        /**
         * Глубина создаваемой вложенности директорий.
         * @var int
         */
        private $depth = 3;
    
        /**
         * DirectoryGenerator constructor.
         *
         * @param string $file_name имя файла
         */
        public function __construct(string $file_name)
        {
            if (!strlen($file_name)) {
                throw new \InvalidArgumentException(__METHOD__ . ': Указан параметр нулевой длинны');
            }
    
            $this->file_name = $file_name;
        }
    
        /**
         * Создает директории (если они ещё не созданы) на основе имени файла
         * (например, d2d8f9c20083bd8483ac5d5526f923b9.jpeg) и возвращает путь.
         *
         * @param string $destinationDir директория назначния
         * @return string путь, например: i\700x600\d\2\d\
         */
        public function create(string $destinationDir): string
        {
            $destinationDir = rtrim($destinationDir, '\/');
    
            for ($i = 0; $i < $this->depth; $i++) {
                $destinationDir .= DIRECTORY_SEPARATOR . $this->file_name[$i];
    
                if (!is_dir($destinationDir)) {
                    if (!mkdir($destinationDir, 0775)) {
                        throw new \RuntimeException(__METHOD__ . ': Не удалось создать директорию ' . $destinationDir);
                    }
                }
            }
    
            return $destinationDir . DIRECTORY_SEPARATOR;
        }
    
        /**
         * На основе имени файла (например, d2d8f9c20083bd8483ac5d5526f923b9.jpeg)
         * возвращает путь к файлу для HTTP, вида /d/2/d/8/f/.
         *
         * @todo переименовать, название не отражает сути
         * @return string HTTP-путь к файлу
         */
        public function getHttpPath(): string
        {
            $destinationDir = '';
    
            for ($i = 0; $i < $this->depth; $i++) {
                $destinationDir .= '/' . $this->file_name[$i];
            }
    
            return $destinationDir . '/';
        }
    }
    Ответ написан
    Комментировать
  • Реальная заработная плата frontend/backend разработчика в Москве?

    php666
    @php666
    PHP-макака
    Специально тут зарегестрировался, что бы немного высказать свое мнение. Соглашусь с теми, кто пишет, что в Москве это не деньги. Объясню почему.

    Живу с рождения за МКАДом, недалеко от Москвы. Практически вся хлебная IT-работа в центре Москвы. На окраинах города - спальные районы, нет почти бизнес-центров, соответственно мало работадателей. За МКАДом по IT - вообще нет работы (там вообще никакой работы нет). Так вот, что бы ежедневно добираться до центра Москвы надо либо иметь колоссальный запас здоровья, либо квартиру хотя бы около метро. Остальное - выжмет из вас все соки, вы проклянете это IT и с радостью убежите к себе в провинцию работать кем угодно. Т.е. как минимум 30-35 круб на аренду в спальном районе готовтесь отдать.

    У меня сейчас зп 100 ровно. Для Москвы не много (как и для моего стажа), но я нашел место, куда из своего подмосковья доезжаю на машине за час. Обратно - 30 минут! Это - просто идеальнейший вариант. Раньше, много лет назад, я работал в Москве, в центре, и полностью подорвал здоровье - ежедневно только на дорогу 4-5 часов в день в переполненных вагонах метро, электрички, маршрутке. Когда обзавелся автомобилем - стало легче, но столкнулся с другой проблемой - колоссальные московские пробки, большой расход бензина, траты на амортизацию машины и ремонты. Получается, что работа в Москве - это всегда компромисс. Не получится просто так приехать и получать 100 круб без финансовых или физических затрат. 100 в месяц для Москвы - это нормальные деньги, если вы москвич. Не замкадыш, не понаехавший, а москвич со своей квартирой, которому даже автомобиль не нужен, что бы добраться до метро.

    Далее. Цены, как тут сказали, в Москве выше. На все. Зарплата в 100 - это просто минимальный прожиточный минимум для взрслого человека, у которого есть хоть немного амбиций (свое авто, накопления, здоровье, одежда). На эти деньги тут даже семью нельзя содержать. Я недавно был у стоматолога, цена за один зуб - от 3500 до 6000 (работы на полчаса). Парикмахерская - 500 рублей. Лайтовывй пакет в Пятерочке из помидор, сосисок, пачки сигарет и кошачего корма выйдет в 1000 рублей. Сломались очки, цена новых - 7000 рублей! Если захотим свое авто или импотеку, то вообще не о чем и говорить с таким доходом.

    Компании тоже разные. Последняя компания, где я работал, кишила самодурами-начальниками, которые имели мозги на пустом месте. Те. найти работу с хорошей зп, с хорошими условиям труда и адекватным коллективом - еще надо постараться, очень сильно постараться. Был у меня период в жизни, я долго искал работу и знаю, что есть в москве куча компаний, где постоянно открыты вакансии, т.к. там либо неадекваты у руля, либо текучка страшная.

    Провинциалам я всё же советовал искать удаленку или другой город.
    Ответ написан
    9 комментариев