• Зачем нужны абстрактные классы (PHP)?

    У разных языков по разному. Например в Java можно реализовывать кучу интерфейсов, но нельзя реализовать множественное наследование не больше 3-ех наследников и с помощью интерфейсов решают это.

    Интерфейс нужен обычно, когда описывается только интерфейс (тавтология). Например, один класс хочет дать другому возможность доступа к некоторым своим методам, но не хочет себя "раскрывать". Поэтому он просто реализует интерфейс.

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

    Пример: Абстрактный класс заведомо не будет запрошен как объект. К примеру абстрактный класс - Транспорт: Но все его наследники будут Автомобилем, краном, лодкой, самолет и т.д. Например вы заведомо знаете, что весь транспорт будет двигаться. И вы объявляете абстрактный метод(движение) в абстрактном классе, который нужен будет 100% всем наследникам т.е. без движения это уже не транспорт и новый наследник обязан будет реализовать это. В самом же абстрактном классе, есть другие поля и свойства, которые будут унаследованы. Ну например мощность двигателя(очень грубо), или то что их роднит.
    Ответ написан
    2 комментария
  • Java или Node.js для большого проекта?

    Очень много зависит от вас, но вот что могу сказать:
    Ява будет быстрее ноды, не только потому что JS не имеет типизации, но это кроется и в асинхронности JS и в скорости выполнения мат. задача и алгоритмов. Если у вас сложный алгоритм, который выполняется 2 с, то Сервер будет занят выполнением и не сможет принять еще что либо. В то время как Java имеет многопоточность. Для хайлоад сайтов, вместе с нодой нужно будет использовать более быстрый язык, например как С++. Либо оптимизировать код после.
    Ответ написан
  • Как сделать поиск в Yii2?

    Дык, а в чем сложность ? делаете форму с инпутом пишите к ней валидацию.
    запрос для QB у вас есть, вы сами его написали. Делаете запрос, вывод можно через Ajax сделать, если Бд небольшое.

    только рекомендую делать вам так LIKE LOWER('%то что передал юзер%').
    Вероятно, что ваш проект может стоять на разных бд и например PostgreSQL имеет другой аналог LIKE, он ищет по регистру аналогия на мускул без учета регистра будет такая ILIKE LOWER('%то что передал юзер%')
    Ответ написан
    Комментировать
  • Yii2 Вывод связанных данных в dropDownList?

    Вот так вот
    Все тоже самое, только названия другие.

    Посмотрите как сделан каталог на той же розетке. Там реализация следующая:
    - Раздел(например Компьютеры)
    ->** см ниже
    ->Категория( например Мониторы, Процессоры, мышки, клавиатуры)
    -> Далее сами продукты.

    (Опционально!) можно добавить и под категорию между разделом и категорией, например если вы хотите разделить компьютеры по классам (Игровые, ноутбуки, для офиса и т.д.) Если у вас бренд, можно выводить по брендам.
    Ответ написан
    Комментировать
  • В каком случае стоит подключать поисковой движок?

    Когда нужно осуществлять поиск по всем полям, ну или очень большое кол-во запросов.
    Ответ написан
    Комментировать
  • YII2: Как сделать Layout уровня-Модуля?

    Для модуля аналогичное переопределение как и для контроллеров. Таким вот образом. Если layout не переопределен для модуля, он будет использовать его в уровне приложения.
    для пути @backend/views/layouts/post.php
    namespace app\controllers;
    
    use yii\web\Controller;
    
    class PostController extends Controller
    {
      //
        public $layout = 'post';
    }


    Пруф

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

    Либо используйте вложенность для шаблонов. Описывается ниже в статье, на окторую дал ссылку.
    Ответ написан
    Комментировать
  • Почему принимается как массив, а не как объект?

    А что вы сделали, что бы он был объектом ?
    Массив идет пара + значение. PHP может преобразовывать типы данных.
    Но массив это массив, а объект это объект. В цикле вы только перебираете полученное.
    Вы либо создадите объект и наполните его полученным массивом. Либо более изящное решение вам подскажут.
    Ответ написан
    Комментировать
  • Как правильно сделать select с помощью hasMany()?

    1) Связи объявляются на двух концах пример:
    class Customer extends ActiveRecord
    {
        public function getOrders()
        {
            return $this->hasMany(Order::className(), ['customer_id' => 'id']);
        }
    }
    
    class Order extends ActiveRecord
    {
        public function getCustomer()
        {
            return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
        }
    }


    2) Получение связных данных
    // SELECT * FROM `customer` WHERE `id` = 123
    $customer = Customer::findOne(123);
    
    // SELECT * FROM `order` WHERE `customer_id` = 123
    // $orders - это массив объектов Order
    $orders = $customer->orders;


    3) Принцип получения массива объектов. Второй вариант для продолжения запроса типа ->where(Бла бла)
    $customer->orders; // массив объектов `Order`
      $customer->getOrders(); // объект ActiveQuery
    Ответ написан
    2 комментария
  • Yii & Yii2. Как вы управляете связанными данными?

    Ответ в самом низу, но опишу как делаю я, мне может тоже подскажут в комментах.

    Обычно это два варианта:
    1) Вы не будете использовать релейшены. Тогда просто вытащишь объект и работаешь с ним.
    2) Вы будете использовать релейшены. Делай джоин\withJoin

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

    Сейв делаю линком:
    $customer = Customer::findOne(123);
    $order = new Order();
    $order->subtotal = 100;
    $order->link('customer', $customer);

    В вышеприведённом примере, метод присвоит атрибуту customer_id объекта Order значение атрибута id объекта Customer и затем сохранит его в базу данных. Тоже самое можно делать и с промежуточными таблицами, линк автоматов вставит строчки в промежуточную таблицу.

    При удалении можно использовать метод unlink() - он снимает все связи выставляя Id-шки объектов в null, а если передать с атрибутом $delete = true. Он удалит строку на связи в промежуточной таблице.

    Ответ: Да, удалять и заново прописывать.
    Ответ написан
    Комментировать
  • Как сделать выборку из всех таблиц одной базы данных в SQL Server?

    Просто укажите таблицы через запятую, название колонок тогда должны совпадать.

    SELECT * FROM table_1, table_2 WHERE table_1.id > table_2.user_id


    В коде выше, условие, если из таблицы 1 Id больше чем в юзере, мы вытаскиваем записи.
    Естественно вставьте своё условие. )
    И после FROM указывается не название базы данных(database), а имена таблиц.
    После FROM можно попробовать вставить * , что означает "все", но не уверен, что так будет работать.
    Ответ написан
    Комментировать
  • Как организовать сортировку по связи один ко многим?

    В Laravel можно сортировать по нескольким параметрам.

    User::orderBy('name', 'DESC')
        ->orderBy('email', 'ASC')
        ->get();


    сам запрос формируется таким образом.

    SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC


    Либо приджойнить товары по Id и сортировать уже по общей таблице.
    Ответ написан
  • Где размещать код фильтрации в Yii2?

    Фильтры это...
    Но на сколько я знаю, логику описывать можно в моделях, там же и валидация. Сама же фильтрация, ссылку на которую дал выше, описывается в контроллерах. Только ознакомитесь внимательно. Связи естественно в моделях подтягиваются.
    Ответ написан
  • Как в PHP искать похожие слова?

    Не знаю как на счет php, но можно попробовать через Sphinx - модуль поисковой машины.

    Если текст хранится в БД, то через запрос LIKE '%'.$someText.'%' или ILIKE в зависимости от ваше базы. Запросы такого типа ищут совпадения.
    Ответ написан
    Комментировать
  • При загрузке большой страницы firefox виснет, как исправить?

    У меня все отобразил. "Вирусно-бактериальное и экологическое отягощение (564)"
    но возможно на сервере мало памяти выделено, либо сам запрос не корректный.
    Ответ написан
    Комментировать
  • Какой шаблонизатор посоветуете для OpenSource проекта на Yii2?

    Используйте Твиг, он не только более функциональный чем Smarty 2/3, но и быстрее в три раза, кушает меньше памяти при компиляции и использует меньше памяти при скомпилированных шаблонах.
    Ответ написан
    8 комментариев
  • Как в Yii2 не загружать фикстуры для некоторых тестов из набора?

    Закомментировать метод ?
    Ответ написан
    Комментировать
  • Что по советуете подростку в программировании?

    Для начала определитесь с тем, каким программистом вы хотите быть?
    WEB(Тут все понятно, чаще всего это сайты, интернет магазины, сервис и т.д.)
    ПО(Разработка программного обеспечения для компьютеров, это не только скайп для винды. Это и программирование автоматических контроллеров на заводах, медицинское оборудование МРТ, стройки, роботы и прочее прочее.)
    Мобильный(Если вам интересно, разработка под мобильные устройства и планшеты).
    Интернет и технологии беспроводных сетей. И этих сфер очень много, я не охватываю игровую индустрию, бизнес аналитику и прочее.

    Сейчас вы знаете мизер от каждого куска, сконцентрируйтесь на одном и учите. Тяжело? Ищите другое решение, программирование это не один путь, это множество развилок. Ну и не исключайте вариант, может ИТ не ваше. Поскольку хороший программист, сам все найдет и сам все выучит.
    Ответ написан
    1 комментарий
  • Как правильно подготовиться до уровня Junior PHP?

    Как написали выше, без фреймворка далеко не уедете. Для общего будет достаточно написать блоги на Yii2 и Symfony 2(Ларавел написан на ядре от симфони, есть нечто схожее). Пользуйтесь при разработке ООП(это нужно не только работодателю, но и вам. Поскольку придет ваш клиент через два года и попросит фичу, а у вас костыль на костыле и чудище никак не расширяемо). И конечно, читайте документацию того, на чем вы работаете, на английском и чем свежее тем лучше. В частности, колонки Best Practice очень помогут на первых этапах. Книги бесполезны, то что было два года назад, уже никому не нужно.

    Реализация своего проекта, тогда и тестируйте его по полной. На собеседованиях будете рассказывать как и что делали, и почему. Можно попросится помощником кому-то на фрилансе, или поработать бесплатно. Это даст ощутимый буст в знаниях, не только как программиста, но и члена команды. Научитесь использовать миграции, системы баг трекинга, системы версионного контроля, что при командной разработке не мало важно. А в качестве джуна вы будете обязательно работать в команде и под присмотром. Важно работать с разной информацией и уметь предложить несколько вариантов разработки и решений. Как-то так.

    Если вы располагаете временем. Попробуйте сделать что-то сложнее чем интернет магазин. Например, сайт авиакомпании с рейсами и заказом билетов, мониторинг и пр. Банковские системы, работа с API гугла, фейсбука, вк, или онлайн касс. Разные виды парсинга данных и их отображения.
    Ответ написан
    8 комментариев