Я нашел этот фрагмент кода:
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 вместо расширения AbstractModelFactoryServiceLocatorInterface в качестве параметра для функции createServiceЧем это отличается от той реализации?
А что означает ::class?
Версия Zend - 2.5.






::class возвращает FQCN (полное имя класса), например "\ Пространство имен \ Путь \ К \ Имя класса".
При подготовке к 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.
Пожалуйста. Обратите внимание, что я не против, что вам понадобится помощь. Использование констант классов было нормой в течение многих лет, поэтому вам нужно либо /, либо / все: 1) начать изучать много PHP и шаблонов кодирования (новых или догоняющих); 2) найдите себе хорошего редактора, который очень помогает (могу порекомендовать PhpStorm); 3) получить помощь, будь то внештатный сотрудник, дополнительные сотрудники или друзья (в зависимости от того, где у вас есть этот проект) со знанием ZF2 /. Потому что у ZF действительно высокая кривая обучения, и «просто делаю / пробую что-то» вы только уедете.
Спасибо за это, это многое мне прояснило. Хотелось бы, чтобы были комментарии относительно того, почему мой вопрос был отклонен, я попытался сначала найти ответы, прежде чем прибегать к этому, думая, что могут быть другие причины, помимо этого, почему кто-то написал фабричный класс таким образом. Вчера по какой-то причине, когда я искал
::class, он показал мне запутанные статьи и не включил ссылку на руководство по PHP. В любом случае, спасибо @rkeet за ответ на мой вопрос, несмотря ни на что, я очень ценю это.