Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • В чем разница между dependency injection и методом, который возвращает тип класса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В чем разница между поехать в отпуск и футболом?
    И в том и в другом случае мы будем носить обувь.
    Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

    Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

    Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
    Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

    Контроль типов надо использовать, чтобы твой код был чище и работал предсказуемее.

    При этом dependency injection вообще не имеет никакого отношения ни к твоим примерам, ни к контролю типов. Внедрение зависимости относится к классам, а не методам. И означает, что если твой класс использует в работе какие-то инструменты, то он берет их не из воздуха - из всяких жлобал, синглетонов, контейнеров, или клепает прямо на месте - а явно получает при создании в виде параметров конструктора.
    Внедрение зависимостей следует использовать, чтобы твой код было легче изменять и поддерживать.
    Ответ написан
    6 комментариев
  • Писать свой автозагрузчик или можно использовать из composer?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Знакомлюсь с темой автозагрузки классов, пока не очень понятно.

    Надо написать свой, тогда станет понятнее.

    а дальше просто:
    если в проекте используется композер, то разумеется использовать его автозагрузку
    если не используется, то тащить композер только ради автозагрузки как-то глупо
    Ответ написан
    8 комментариев
  • Как указать интервал дат в SQL из GET?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    конечно за такой ответ я буду гореть в аду, но лучше это сделаю я, чем какой-нибудь подлец
    данные из query string лежат в массиве $_GET
    интервал в SQL делается просто, оператором BETWEEN
    причем к первой дате прибавляется 00:00:00, а ко второй 23:59:59
    функции mysql_query в РНР уже много лет как нет
    но если уж приходится копаться в какой-то доисторическоом гэ
    $begin = addslashes($_GET['begin']. ' 00:00:00');
    $end = addslashes($_GET['end']. ' 23:59:59');
    $banid = (int)$banid;
    $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = $banid AND `datetime` BETWEEN '$begin' AND '$end'";

    но меня конечно аж передергивает от этого говнокода
    утешает только то что местные помогайки напишут еще хуже

    в нормальном мире этот код выглядит так

    $begin = $_GET['begin']. ' 00:00:00';
    $end = $_GET['end']. ' 23:59:59';
    $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = ? AND `datetime` BETWEEN ? AND ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$banid, $begin, $end]);

    Ответ написан
  • Как исправить логическую ошибку в использовании флагов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Присвой переменной $string либо какое-то значение 2, и выполни свои условия.
    Ответ написан
    Комментировать
  • Почему файл не подключаеться через require?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сейчас я объясню тебе Самую Главную Вещь, которую должен знать любой пользователь пхп.

    Если у перед тобой стоит выбор, кому верить - собственным фантазиям или сообщению об ошибке - то всегда выбирай второе.

    Тебе надо твердо запомнить это правило. И пересмотреть свой вопрос с его учетом.

    И в итоге у тебя получится совсем другой вопрос.
    Во-первых, мы узнаем, что файл не подключаетсячерез require по осовершенно банальной причине - он не найден.
    Во-вторых - следуя вышеприведенному правилу - что файла такого на диске нет
    (тут важно понимать, что файл всегда включает в себя путь. Если тебя послали на кухню за чайником, а ты пошел за ним в туалет, то в туалете чайника нет. потому что важно, куда ты за ним пошел. то же и с файлами. у тебя может быть милилон файло в н диске, нодо тех пор пока ты будеш ьуказывать неправиьный путь, ни один не будет найден)
    И вот дальше у нас возникают совсем другие вопросы::
    По какому пути композер пытается зкгрузить файл?
    и почему композер пытается загрузить файл не из той папки, в которой файл на самом деле лежит?

    Навскидку сказать сложно, скорее всего ты руками там что-то после установки поковырял, но в любом случае стоит для начала попробовать все переустановить с нуля
    Ответ написан
    Комментировать
  • Как узнать день недели?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    strtotime(date('Y-m-d')) - это глупость
    во-первых, есть time()
    во-вторых, оно тебе не нужно
    в-третьих, 'Y-m-d' - это не магическое заклинание, а один из форматов, которые понимает функция date(). Описание которых пожно почитать в документации. И найти там то что тебе нужно
    Ответ написан
    6 комментариев
  • Как подключить php файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    php файл нельзя подключить к html файлу
    Ответ написан
    Комментировать
  • Как вернуть только ключи после array_filter?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, три условия$value == null && $value == false && $value == '' не имеют смысла, поскльк каждое из них проверяет одни и те же значения. Достаточно любого из них. или просто !$value

    Самое главное, при чем здесь вообще array_filter()? Если нам надо получить ключи массива, то какая разница, откуда он взялся?
    По запросу "как получить ключи массива РНР" гугль дает примерно миллион ответов, первый из которых - ссылка на функцию, которая возвращает ключи массива
    Ответ написан
    2 комментария
  • Как вывести записи которые не были выведены на это странице?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если я правильно понял вопрос, то сортировать по advertising_target, rand()
    Ответ написан
    Комментировать
  • Исполнение скрипта php с аутентификацией в cron?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если запрос к тому же хосту, на котором кртится крон, такое "так поставленная задача" - это просто глупость.
    А вообще, стыдно уже в таком возрасте не уметь пользоваться интернетом.
    Ответ написан
  • Учу JavaScript, дальше - Vue.js, среднее знание PHP. На чем сделать CRUD-систему?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    И, да, прошу не разводить холивар лучше-хуже. Все системы работают хорошо, всем комфортно, все задачи на каждой системе можно решить. Просто прошу совет.

    Чувак.
    С таким логическим мышлением не стоит идти в программисты.
    Вот просто не надо. Найди себе другое занятие. Сейчас модно быть парикмахером например.

    РНР "умирает" именно потому что язык настолько простой, что "простенькую систему по (манам из Гугла)" может сделать даже обезьяна. И 99% кода на нем написано обезьянами. И люди судят язык не по его возможностям, а по коду написанному гамадрилами и по тем макакам, которые "ругают и кричат что умирает".

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очередной эстет блин.
    Потом разгребай за такими код.
    Что здесь "некарасивого"?
    Ты не на вернисаж пришел.
    Код должен быть не "красивым", а делать что нужно, быть эффективным и читабельным.
    Явный цикл с явным условием - это кинтэссениция читабельности, любой, кто его увидит, сразу поймет что он делает.

    Если глаза прямо не могут смотреть на 4 строчки - сделай функцию. Нормальную функцию, которая вызывается в 4 слова, а не через хитрую вложенную конструкцию с подвыподвертом, которую тебе уже тут советуют
    Ответ написан
    Комментировать
  • PHP PDO bindParam, второй параметр передается по ссылке. Зачем?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос хороший, а ответ очень простой
    Подготовленные выражения - это ведь подукция двойного назначения.
    Они не только защищают от инъекций, но так же позволяют сэкономить несколько миллисекунд, если один и тот же запрос надо выполнить несколько раз с разными данными.

    То есть по сути никакой PDO::PARAM_CLOSURE для того чтобы изменить данные на лету не нужен - ты тупо меняешь значение приязанной переменной. Именно благодаря передаче по ссылке.
    $stmt = $pdo->prepare("SELECT ?");
    $stmt->bindParam(1, $var);
    $var = 1;
    $var = 2; // меняем на лету
    $stmt->execute();
    $var = 3;
    $stmt->execute();


    Плюс, как правильно отмечают товарищи в комментах, иногда переменная служит для возвращения значения из хранимой процедуры. То есть после выполнения запроса в привязанной по ссылке переменной будет не исходное значение, а то, которое возвратила процедура
    Ответ написан
    3 комментария
  • Чем плохо выносить повторяющиеся элементы дизайна в отдельные файлы и подключать их потом с помощью PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тут, как обычно, не одна проблема, а три.

    Первая проблема - это, как всегда, неумение задавать вопросы.
    Вот и сейчас - вопрос "чем плохо ходить пешком?" Что можно ответить на этот вопрос?
    Но потом выясняется что вопрос на самом деле "Я живу в 20 километрах от работы. Чем плохо ходить на работу пешком?".

    То есть вопрос у нас на самом деле, "Чем плохо выносить повторяющиеся элементы HTML в отдельные файлы и подключать их потом с помощью include?". Этот вопрос уже будет более осмысленный, и на него даже можно дать ответ не выглядя при этом идиотом.

    Вторая проблема заключается в том, что подход с "хидером и футером" реально неудобен и устарел уже лет 20 как. И вместо него используются шаблонизаторы. Тупо редактировать хтмл удобнее когда он лежит в одном файле, а не в header.php. footer.php. menu.php, banners.php и еще 10 файлах.
    И это я даже не заикаюсь о случае, когда на разных страницах надо поключать разные файлы стилей и скриптов.

    И третья проблема заключается в том, что хотя в принципе и можно что-то несложное накалякать с хидером и футером, но поголовно все новички все равно клепают их неправильно - а именно вкрячивают хидер до того, как скрипт вообще начнет работу. И потом имеют все прелести невозможности вывести НТТР заголовок, поменять что-то в хидере в зависимости от выводимых данных, поменять формат вывода или аварийно завершить работу.
    Ответ написан
    Комментировать
  • Как запретить обращение(скачивание архива) по url?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как запретить обращение(скачивание архива) по url?

    поместить архив за пределы директорий сайта

    как тогда определенным пользователям выдавать данный файл?

    а это уже другой вопрос, не имеющий никакого отношения к первому.
    Научись задавать вопросы, чтобы получать нормальные ответы.
    На свой текущий вопрос ты ответ получил.
    Ответ написан
    Комментировать
  • Как добавить в массив с json строкой еще одну строку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не хранить никакой джейсон в БД
    Добавлять строку в таблицу обычным порядком, запросом INSERT
    Ответ написан
    2 комментария
  • Что лучше редиректы или цепочка обязанностей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Что лучше, ходить пешком или кеды? Как это согласуется с КПСС?

    Вопрос бессмысленный.
    Если нужен редирект, то надо делать редирект.
    Если редирект не нужен, то не делать.
    К ООП все эти страдания не имеют никакого отношения.
    Ответ написан
  • Как посчитать кол-во строк в бд MySQL PHP подготовленным запросом PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здесь два вопроса в одном.

    1. Как посчитать кол-во строк в бд MySQL PHP подготовленным запросом PDO?

    Очень просто. Надо узнать, как в SQL считают строки, а потом выполнить подготовленный запрос. В SQL строки считают запросом count(*). А в РНР строки считают только обезьяны.

    Далее просто подготовить этот запрос и выполнить его

    $sql = "SELECT count(*) FROM `clients` WHERE `email` = ?";
    $pattern = [$data['email']];
    $sth = $connection->prepare($sql);
    $sth->execute($pattern);
    $result = $sth->fetchColumn();


    Просто как три копейки

    Вопрос номер два: Пачиму ничиво нинаходит?

    Ответ тоже простой - потому что в базе данных не находится совпадения с входящими данными.

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

    Потому что если ты воображаешь, будто "GET-параметр принимается правильно, пользователи с нужным E-mail есть", а база данных говорит обратное, то база данных права в 100% случаев. Её писали совсем не дураки.

    И если ничего не находит, то надо проверять. Что у тебя в базе, и что у тебя в во входящих параметрах. Там могут быть непечатные символы, ты можешь обраoаться к какой-то другой базе, у тебя может быть опечатка во входящих данных. Всё надо проверить. И ошибка обязательно найдётся.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не надо этого делать.
    Константы используются не для данных из базы.
    Записывай в переменную, а не в константу.
    Обычным способом, обращаясь к БД через элоквент
    Ответ написан
    6 комментариев