从 Adwords PHP Sdk 19 迁移到 32 - 如何动态调用服务

Migration from Adwords PHP Sdk 19 to 32 - How to dynamically call services

我面临着将基于现已过时的 Adwords PHP Sdk 19 的整个应用程序迁移到新的 32 版本的挑战。

我的应用程序的核心之一是我在需要时动态调用 Adwords 服务。

$customerService = $adwordsClient->GetService($nameOfTheService);

这将转化为,例如:

$customerService = $this->GetService('CustomerService');

这也为我带来了便利,无需在我的代码中导入所有 classes。但是使用新的 SDK,它是这样工作的:

$customerService = $this->adWordsServices->get($this->adWordsSession, CustomerService::class);

所以写不出来

$nameOfTheService::class

因为动态 class 名称在 php 的编译时是不允许的。 此外,PHP 将迫使我预先导入每个将像这样调用的 class。

关于如何以优雅高效的方式进行这项工作有什么想法吗?

对于那些试图组织您的 Adwords PHP 插件的人来说,这里有一个有用的 class 可以继续使用字符串调用 classes。请记住更改您正在使用的版本的 v201705,并检查新版本上的任何服务更改。

<?php
use Exception;
use Google\AdsApi\AdWords\v201705\mcm\AccountLabelService;
use Google\AdsApi\AdWords\v201705\cm\AdCustomizerFeedService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupAdService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupBidModifierService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupCriterionService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupExtensionSettingService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupFeedService;
use Google\AdsApi\AdWords\v201705\cm\AdGroupService;
use Google\AdsApi\AdWords\v201705\cm\AdParamService;
use Google\AdsApi\AdWords\v201705\rm\AdwordsUserListService;
use Google\AdsApi\AdWords\v201705\cm\BatchJobOpsService;
use Google\AdsApi\AdWords\v201705\cm\BatchJobService;
use Google\AdsApi\AdWords\v201705\cm\BiddingStrategyService;
use Google\AdsApi\AdWords\v201705\billing\BudgetOrderService;
use Google\AdsApi\AdWords\v201705\cm\BudgetService;
use Google\AdsApi\AdWords\v201705\cm\CampaignBidModifierService;
use Google\AdsApi\AdWords\v201705\cm\CampaignCriterionService;
use Google\AdsApi\AdWords\v201705\cm\CampaignExtensionSettingService;
use Google\AdsApi\AdWords\v201705\cm\CampaignFeedService;
use Google\AdsApi\AdWords\v201705\cm\CampaignGroupPerformanceTargetService;
use Google\AdsApi\AdWords\v201705\cm\CampaignGroupService;
use Google\AdsApi\AdWords\v201705\cm\CampaignService;
use Google\AdsApi\AdWords\v201705\cm\CampaignSharedSetService;
use Google\AdsApi\AdWords\v201705\cm\ConversionTrackerService;
use Google\AdsApi\AdWords\v201705\cm\CustomerExtensionSettingService;
use Google\AdsApi\AdWords\v201705\mcm\CustomerService;
use Google\AdsApi\AdWords\v201705\ch\CustomerSyncService;
use Google\AdsApi\AdWords\v201705\cm\DataService;
use Google\AdsApi\AdWords\v201705\cm\DraftAsyncErrorService;
use Google\AdsApi\AdWords\v201705\cm\DraftService;
use Google\AdsApi\AdWords\v201705\cm\FeedItemService;
use Google\AdsApi\AdWords\v201705\cm\FeedMappingService;
use Google\AdsApi\AdWords\v201705\cm\FeedService;
use Google\AdsApi\AdWords\v201705\cm\LabelService;
use Google\AdsApi\AdWords\v201705\cm\LocationCriterionService;
use Google\AdsApi\AdWords\v201705\mcm\ManagedCustomerService;
use Google\AdsApi\AdWords\v201705\cm\MediaService;
use Google\AdsApi\AdWords\v201705\cm\OfflineCallConversionFeedService;
use Google\AdsApi\AdWords\v201705\cm\OfflineConversionFeedService;
use Google\AdsApi\AdWords\v201705\cm\ReportDefinitionService;
use Google\AdsApi\AdWords\v201705\cm\SharedCriterionService;
use Google\AdsApi\AdWords\v201705\cm\SharedSetService;
use Google\AdsApi\AdWords\v201705\o\TargetingIdeaService;
use Google\AdsApi\AdWords\v201705\o\TrafficEstimatorService;
use Google\AdsApi\AdWords\v201705\cm\TrialAsyncErrorService;
use Google\AdsApi\AdWords\v201705\cm\TrialService;

class AdwordsServicesList
{
    private static $serviceList = [
        "AccountLabelService" => AccountLabelService::class,
        "AdCustomizerFeedService" => AdCustomizerFeedService::class,
        "AdGroupAdService" => AdGroupAdService::class,
        "AdGroupBidModifierService" => AdGroupBidModifierService::class,
        "AdGroupCriterionService" => AdGroupCriterionService::class,
        "AdGroupExtensionSettingService" => AdGroupExtensionSettingService::class,
        "AdGroupFeedService" => AdGroupFeedService::class,
        "AdGroupService" => AdGroupService::class,
        "AdParamService" => AdParamService::class,
        "AdwordsUserListService" => AdwordsUserListService::class,
        "BatchJobOpsService" => BatchJobOpsService::class,
        "BatchJobService" => BatchJobService::class,
        "BiddingStrategyService" => BiddingStrategyService::class,
        "BudgetOrderService" => BudgetOrderService::class,
        "BudgetService" => BudgetService::class,
        "CampaignBidModifierService" => CampaignBidModifierService::class,
        "CampaignCriterionService" => CampaignCriterionService::class,
        "CampaignExtensionSettingService" => CampaignExtensionSettingService::class,
        "CampaignFeedService" => CampaignFeedService::class,
        "CampaignGroupPerformanceTargetService" => CampaignGroupPerformanceTargetService::class,
        "CampaignGroupService" => CampaignGroupService::class,
        "CampaignService" => CampaignService::class,
        "CampaignSharedSetService" => CampaignSharedSetService::class,
        "ConversionTrackerService" => ConversionTrackerService::class,
        "CustomerExtensionSettingService" => CustomerExtensionSettingService::class,
        "CustomerFeedService" => CustomerFeedService::class,
        "CustomerService" => CustomerService::class,
        "CustomerSyncService" => CustomerSyncService::class,
        "DataService" => DataService::class,
        "DraftAsyncErrorService" => DraftAsyncErrorService::class,
        "DraftService" => DraftService::class,
        "FeedItemService" => FeedItemService::class,
        "FeedMappingService" => FeedMappingService::class,
        "FeedService" => FeedService::class,
        "LabelService" => LabelService::class,
        "LocationCriterionService" => LocationCriterionService::class,
        "ManagedCustomerService" => ManagedCustomerService::class,
        "MediaService" => MediaService::class,
        "OfflineCallConversionFeedService" => OfflineCallConversionFeedService::class,
        "OfflineConversionFeedService" => OfflineConversionFeedService::class,
        "ReportDefinitionService" => ReportDefinitionService::class,
        "SharedCriterionService" => SharedCriterionService::class,
        "SharedSetService" => SharedSetService::class,
        "TargetingIdeaService" => TargetingIdeaService::class,
        "TrafficEstimatorService" => TrafficEstimatorService::class,
        "TrialAsyncErrorService" => TrialAsyncErrorService::class,
        "TrialService" => TrialService::class
    ];

    static function get(string $name)
    {
        if (!array_key_exists($name, self::$serviceList)) {
            throw new Exception("This AdWords Service does not exist. :(");
        }

        return self::$serviceList[$name];
    }
}