Давайте разберёмся с массивами (объектами Array), какие у них есть методы и как ими пользоваться.

Как создать массив

let myArray = [];
// эквивалентно:
myArray = new Array();

Если мы не создавали массив, а получили переменную извне, то нужно проверить является ли она массивом.

А также иногда бывает полезно проверить переменную на существование проверив её тип, чтобы избежать ошибки вроде Uncaught ReferenceError: myArray is not defined:

if (
  typeof myArray === 'object' &&
  Array.isArray(myArray)
) {
  console.log(true);
}

Добавление элементов в массив

Заполнить массив можно при создании:

let myArray = [1, 2, 3];

Либо с помощью метода push:

Допустим у нас есть данные:

$data = 'My secret data!';

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

$password = '1234';

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

$key = sha1($password);

Рекомендуется использовать для шифрования библиотеку OpenSSL: openssl_encrypt(), openssl_decrypt() и вспомогательные функции.

Для начала нужно выбрать метод шифрования, например, aes-128-cbc. Все доступные методы можно посмотреть вызвав функцию openssl_get_cipher_methods().

$method = 'aes-128-cbc';

Теперь нам нужно создать вектор инициализации (IV, Initialization Vector) - случайные данные, на основе которых будет произведено шифрование.

Как установить RabbitMQ?

Для windows очень просто - скачать с официального сайта инсталлятор и установить. :)

Плюс нужно прописать в PATH путь к консольным скриптам (c:\Program Files\RabbitMQ Server\rabbitmq_server-{VERSION}\sbin\).

И добавить в .bashrc: alias rabbitmqctl='rabbitmqctl.bat', чтобы удобнее было запускать консольные команды.

Для установки на Linux и macOS инструкции есть на официальном сайте.

Как проверить запущен ли сервис?

Выполнить в консоли:

rabbitmqctl status

Как посмотреть список сообщений и количество сообщений в них?

Выполнить в консоли:

rabbitmqctl list_queues

Как добавить сообщение в очередь из php?

Устанавливаем библиотеку php-amqplib:

composer install php-amqplib/php-amqplib

Создаём объект соединения:

MVP

Minimum viable product - минимально жизнеспособный продукт. Подход в создании продукта, который позволяет как можно раньше получить пользовательский фидбэк, чтобы принимать правильные решения относительно развития продукта. Снижаем затраты и риски на то, что пользователям не нужно, максимизируем усилия на перспективных гипотезах.

Tty обозначает телетайп, т. е. терминал. Например, порты компьютера, к которым подключены терминалы.

Pty обозначает псевдотелетайп, т. е. программа, которая ведёт себя как терминал, т. е. имеет интерфейсы для ввода и вывода, например, winpty для git bash.

Переименовать первую часть архива из .tar.gz в .tar.gz.001

Переименовать остальные части, например, .tar.gz.1 в .tar.gz.002 и т. д.

Выделить все части архива, нажать правую кнопку мыши и выбрать в 7-zip пункт меню "Распаковать"

Нажать "OK"

Допустим мы получили данные о текущем состоянии счёта пользователя (по первичному ключу) из mysql выполнив запрос:

SELECT * FROM `balance` WHERE `user_id` = 1;

Теперь, когда мы знаем сколько у пользователя на счету, нам, например, нужно добавить на счёт определённую сумму. Считаем новую сумму и отправляем запрос на обновление строки:

Чтобы объекты, указанные в конструкторе класса создавались и подгружались автоматически можно использовать autowiring в контейнере зависимостей от symfony.

Устанавливаем DI компонент от symfony:

composer require symfony/dependency-injection

Описываем зависимости:

// создаём строитель контейнера
$container = new \Symfony\Component\DependencyInjection\ContainerBuilder();

// добавляем публичные зависимости с автозагрузкой
$container->autowire(Config::class)->setPublic(true);
$container->autowire(Database::class)->setPublic(true);

// компилируем контейнер
$container->compile();

Опишем простой класс Config, которые берёт настройки из внешнего файла:

Страницы