Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Опциональные зависимости не необходимы

Anna | 29.05.2014 | нет комментариев

В данном посте речь пойдет о пакетах PHP и об алкогольных зависимостях. Правильней, о так называемых опциональных либо предложенных зависимостях (optional dependencies, suggest/dev-dependencies), которые определяются в composer.json.

Что такое связанность?

Для начала разберемся с тем, что такое связанность и о чем вообще речь. Есть дальнейший код:

namespace GaufretteAdapter;

use GaufretteAdapter;
use MongoGridFS;

class GridFS implements Adapter
{
    private $gridFS;

    public function __construct(MongoGridFS $gridFS)
    {
        $this->gridFS = $gridFS;
    }

    public function read($key)
    {
        $file = $this->find($key);

        return ($file) ? $file->getBytes() : false;
    }
}

Класс GridFS — часть библиотеки абстрактной файловой системы Gaufrette, которую я в какой-то степени изменил. Для определения всех зависимостей этого ломтика кода мы обязаны задать себе следующие вопросы:

  • Что необходимо, Дабы данный код заработал?


Но необходимо подумать еще вот о чём:

  1. Какая версия PHP понадобится для запуска, Дабы не получать ошибок?
  2. Допустимо, понадобится еще и какую-то определенную версию ставить?
  3. Какие растяжения PHP потребуются?
  4. Какие PEAR-библиотеки необходимо установить?
  5. Каких пакетов не хватает?

Возвращаясь к классу GridFS, версия PHP должна быть не ниже 5.3, потому что применяются неймспейсы. Также, нужен класс MongoGridFS, тот, что является mongo-растяжением к PHP и доступен лишь с версии 0.9.0 этого растяжения. Кажется все, создаем composer.json:

{
    ...,
    "require": {
        "php": ">=5.3",
        "ext-mongo": ">=0.9.0"
    }
    ..
}

Этого списка довольно и сейчас как бы как ничто не останавливает нас от применения данного класса в наших приложениях… Увы, это не так.

Действительный список зависимостей knplabs/gaufrette

Как я теснее говорил, GridFS — часть библиотеки Gaufrette, предоставляющей слой абстрактной файловой системы, для хранения файлов на разных типах файловых систем без опеки о деталях применяемой файловой системы. Взглянем на composer.json этой библиотеки:

{
    "name": "knplabs/gaufrette",
    "require": {
        "php": ">=5.3.2"
    },
    "require-dev": {
        ...
    },
    "suggest": {
        ...
        "amazonwebservices/aws-sdk-for-php": "to use the legacy Amazon S3 adapters",
        "phpseclib/phpseclib": "to use the SFTP",
        "doctrine/dbal": "to use the Doctrine DBAL adapter",
        "microsoft/windowsazure": "to use Microsoft Azure Blob Storage adapter",
        "ext-zip": "to use the Zip adapter",
        "ext-apc": "to use the APC adapter",
        "ext-curl": "*",
        "ext-mbstring": "*",
        "ext-mongo": "*",
        "ext-fileinfo": "*"
    },
    ...
}

И вот он, 1-й сюрприз! Примерно все то, что выяснилось о зависимостях ранее — никуда не годится, потому что библиотека говорит, что ей каждого лишь необходим PHP версии не ниже 5.3.2, а все остальное — по вкусу, опционально либо только для dev целей — называйте это как хотите.

Безусловно, люди, давным-давно использующие Composer либо Packagist теснее привыкли к таким вещам. Но это легко неверный подход. Как мы узнали ранее, ext-mongo это действительная связанность (truedependency) класса GridFS, впрочем composer.json говорит нам об обратном.

Все это обозначает лишь то, что если мы захотим применять данный класс в нашем плане, то неудовлетворительно легко воспользоваться пакетом knplabs/gaufrette. Я также сделал нужным ext-mongo в моем плане, что является оплошностью: это не мой план требует растяжение mongo, а пакетknplabs/gaufrette.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB