PHP: Настройка окружения (6) (Конспект Hexlet)

Введение 

  1. Список тестовых заданий от разных компаний
  2. Установка RDP сервера
  3. Установка chrome на *unix
  4. Установка Visual Studio Code на Linux
  5. Утилита make
  6. репозиторий php-package (репозиторий, содержащий базовую структуру проекта на PHP)
  7.  гайд, посвященный VIM

Установка PHP 

  1. Установка PHP
    1. sudo apt update
    2. sudo apt install php
  2. Ввод версии: php -v
  3. утилита phpbrew (Утилита позволяет удобно переключаться между версиями. Такое может быть нужно когда вы одновременно работаете над двумя проектами, требующими разные версии PHP)

Подробнее о PHP 

  • Cпецификациия PHP
  • Интерпретатор https://github.com/peachpiecompiler/peachpie – он позволяет запускать PHP программы на платформе .NET.
  • PHP:
    • Интерпретируемый – отсутствуе ткомпиляция (внешне)
    • Динамический – проверка типов в PHP происходит в момент выполнения кода
    • Слабо типизированный – автоматически приводит типы там, где считает нужным (описано в спецификации)
  • Что такое компиляция
  • Что такое интерпретация
  • Синтаксис языка – совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.
  • Семантика языка – совокупность правил, определяющих смысл синтаксически корректных конструкций языка, его содержание.

Composer

  1. Composer (управление зависимостями) для каждой операционной системы описан в официальном руководстве:
    1. https://getcomposer.org/download/
    2. https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx
  2. Репозиторий (Registry) – хранилище пакетов PHP, которое называется Packagist.
  3. Установка composer
    1. Выполнить следующий код
      1. php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
      2. php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”
      3. php composer-setup.php 
      4. php -r “unlink(‘composer-setup.php’);”
        (ссылка)
      5. mv composer.phar /usr/local/bin/composer
        (ссылка)
    2. Нюансы
      1. Проверка установки which phploc (Unix-утилита, отображающая полный путь к указанным командам или сценариям).
      2. Для работы composer необходимо добавить строчку кода в файл .profile (vi ~/.profile) PATH=”$PATH:$HOME/.composer/vendor/bin”
  4. Установка git – sudo apt update | sudo apt install git
  5. Установка curl – sudo apt install curl

Управление зависимостями

  1. 2 секции файла composer.json
    1. composer require …- библиотеки для готовой программы 
    2. composer require –dev …- библиотеки для этапа разработки
  2. зависимости будут располагаться в папке vendor (ее необходимо поместить в .gitignore)
  3. Для инициализации библиотек из зависимостей необходимо выполнить команду composer install в папке проекта
  4. Документация по публикации пакета в packagist.org: https://packagist.org/packages/submit
  5. Правило версионирования пакетов semver (нумерация версий)

Автозагрузка

  1. рекомендуемые практики:
    1. Пакет именуется в “шашлычной нотации” (kebab-case).
    2. Каждый пакет может выставлять наружу только одно пространство имён, что снижает риск пересечения с другими пакетами, а также позволяет легко определить принадлежность пространства имён к пакету. В терминологии стандарта PSR-4, такое пространство имён называется “vendor namespace”.
    3. Пространства имён именуются в стиле StudlyCaps и напрямую отображаются на файловую систему. Исключением является корневое пространства имён, которое получается путём трансформации имени пакета.
    4. Исходный код проекта находится в папке src, а тесты в директории tests.
    5. Что бы ни хранилось внутри файлов, именование файлов в стиле StudlyCaps (например, MySuperFile.php).
  2. Пример файла composer.json
    {
    “name”: “hexlet/pairs”,
    “autoload”: {
    “files”: [
    “src/Pairs.php”,
    “src/Lists.php”
    ]
    }
    }
  3. Подключение автозагрузки composer: в начале входного файла проекта нужно прописать строчку require __DIR__ . ‘/../vendor/autoload.php’
    —–
    При изменении файлов из autoload необходимо выполнить команду: composer dump-autoload
  4. Самостоятельная работа
    1. Установка PHP (ссылка)
      1. sudo apt-get install software-properties-common python-software-properties
      2. sudo add-apt-repository -y ppa:ondrej/php
      3. sudo apt-get update
      4. sudo apt-get install php7.2 php7.2-cli php7.2-common
    2. Клонирование репозитория: git clone path-to-repository
    3. Разруливание ошибок:
      1. “the requested PHP extension curl is missing from your system ” – sudo apt-get install php7.2-curl
      2. “the requested PHP extension dom is missing from your system” – sudo apt-get install php7.2-xml
      3. the requested PHP extension mbstring is missing from your system” – sudo apt-get install php7.2-mbstring

Lock файл

  1. Обновление зависииостей – команда: composer update
  2. Обновление конкретной зависимости: composer update vendor-name/project-name
  3. Примео lock файла
    { “_readme”: [ “This file locks the dependencies of your project to a known state”, “Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file”, “This file is @generated automatically” ], “content-hash”: “ab2dac1e4b8d91d81b2295ca726e9499”, “packages”: [ { “name”: “tightenco/collect”, “version”: “v5.5.27”, “source”: { “type”: “git”, “url”: “https://github.com/tightenco/collect.git”, “reference”: “07d58f7f663d5033a08541f9c481d33ad3f514a5” }, “dist”: { “type”: “zip”, “url”: “https://api.github.com/repos/tightenco/collect/zipball/07d58f7f663d5033a08541f9c481d33ad3f514a5”, “reference”: “07d58f7f663d5033a08541f9c481d33ad3f514a5”, “shasum”: “” } } ]
  4. Смысл lock файла – автоматическая фиксация версий библиотек транзитивных зависимостей при первоначальной установке зависимостей.

Скрипты

  1. Composer в контекст выполнения команды scripts файла composer.json добавляет путь /vendor/bin в $PATH (только для текущего вызова!)
  2. Пример вызова скрипта с передачей параметра: composer run-script phpcs — –standard=PSR12
  3. Примеры хуков(более подробно здесь)
    1. pre-package-install
    2. post-package-install
    3. pre-package-update
    4. post-package-update
    5. pre-package-uninstall
    6. post-package-uninstall

Исполняемые файлы в пакетах

  1.  cli-утилиты – пакеты-приложения командной строки
  2. “bin”: [“bin/php-package”] (пример секции файла composer.json) – Эта запись означает, что при установке пакета в операционной системе будет физически создан файл (а точнее, его особая разновидность — символическая ссылка) с именем php-package, запуск которого приведёт к запуску файла вашего проекта по адресу bin/php-package. Как можно заметить, имя ссылки задаётся именем файла (совпадает с ним). Также обратите внимание, что ссылок может быть множество (столько, сколько сами укажите в секции bin).
  3. Выгрузка на github (краткая инструкция, pdf)
    1. Выгрузка

      git init
      git add your_file
      git commit -m “first commit”
      git remote add origin https://github.com/you_repository/you_project
      git push -u origin master

    2. Загрузки изменений

      git pull

  4. Расположение символической ссылки при глобальной установке $HOME/.composer/vendor/bin (путь к этому каталогу надо самостоятельно прописать в переменной окружения PATH)
    1. В зависимости от версии composer директория по умолчанию может различаться
    2. Расположение директории можно настраивать (ссылка)
  5. Указание интерпретатора для исполняемого файла – шебанг#!/usr/bin/env php
  6. Посмотреть, в какую конкретно директорию composer складывает ссылки на исполняемые файлы – composer [global] config bin-dir