Создаете фабричный класс?

Я нашел этот фрагмент кода:

class WebsitesTableFactory extends AbstractModelFactory
{
    public function __invoke(ContainerInterface $container)
    {
        $dbAdapter = $container->get('bc_db');
        $tableGateway = $this->initializeTableGateway('websites', $dbAdapter, null, $container->get(Websites::class));
        return new WebsitesTable($tableGateway);
    }
}

К чему я привык:

  • реализация FactoryInterface вместо расширения AbstractModelFactory
  • использование ServiceLocatorInterface в качестве параметра для функции createService

Чем это отличается от той реализации?

А что означает ::class?

Версия Zend - 2.5.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Константы класса PHP

::class возвращает FQCN (полное имя класса), например "\ Пространство имен \ Путь \ К \ Имя класса".


ZF2 - 3 завода

При подготовке к ZF3 стало обычным использовать __invoke(ContainerInterface $container) вместо createService(ServiceLocatorInterface $serviceManager).

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

Стандартный класс Factory в ZF3 выглядит так:

use Zend\ServiceManager\Factory\FactoryInterface;

class DemoFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        // Do your thing
    }
}

Примечание: другой оператор использования FactoryInterface, чем в ZF2!


Обновите все

Очевидно, вы все еще используете ZF2. Я настоятельно рекомендую вам перейти (или начать обновление) до ZF3. Вы можете прочтите руководство по миграции, однако я бы посоветовал вам просто обновить все одним махом.

Мое предложение потребует от вас много работы (возможно, в зависимости от размера вашего приложения), но все будет актуальным.

Я рекомендую зайти в ваш composer.json и удалить все ограничения версии, а затем обновить все с помощью composer update до последних версий. Затем идите оттуда, у вас будет бесконечное количество ошибок, которые нужно исправить из-за устаревшего материала.

(Могут быть исключения пакетов, которые не могут быть обновлены по какой-либо причине; обратите внимание, что они могут вызвать непреднамеренные ограничения версии, если вы делать последуете приведенному выше совету).


Вам может понадобиться помощь

С другой стороны, вы не знаете, что ::class возвращает FQCN, который довольно прост и стандартен для использования уже довольно давно (начиная с PHP 5.6 (выпущен на полпути 2014), если память не изменяет). Таким образом, приведенное выше может быть слишком ошеломляющим, и я бы порекомендовал вам обратиться за помощью к коллеге или кому-то с большим опытом разработки Zend Framework.

Спасибо за это, это многое мне прояснило. Хотелось бы, чтобы были комментарии относительно того, почему мой вопрос был отклонен, я попытался сначала найти ответы, прежде чем прибегать к этому, думая, что могут быть другие причины, помимо этого, почему кто-то написал фабричный класс таким образом. Вчера по какой-то причине, когда я искал ::class, он показал мне запутанные статьи и не включил ссылку на руководство по PHP. В любом случае, спасибо @rkeet за ответ на мой вопрос, несмотря ни на что, я очень ценю это.

herondale 05.10.2018 02:30

Пожалуйста. Обратите внимание, что я не против, что вам понадобится помощь. Использование констант классов было нормой в течение многих лет, поэтому вам нужно либо /, либо / все: 1) начать изучать много PHP и шаблонов кодирования (новых или догоняющих); 2) найдите себе хорошего редактора, который очень помогает (могу порекомендовать PhpStorm); 3) получить помощь, будь то внештатный сотрудник, дополнительные сотрудники или друзья (в зависимости от того, где у вас есть этот проект) со знанием ZF2 /. Потому что у ZF действительно высокая кривая обучения, и «просто делаю / пробую что-то» вы только уедете.

rkeet 05.10.2018 08:07

Другие вопросы по теме