0

我有下面的代码。当我运行它时,我得到错误:

Fatal error: Cannot redeclare class Google_Account in
   /var/www/vhosts/example.com/httpdocs/google-api-php-client  
  /src/contrib/Google_AnalyticsService.php on line 379

这是因为“ Google_AdsenseService.php ”和“ Google_AnalyticsService.php ”文件都有一个名为Google_Account. Google_Account 类的成员变量和函数在这些文件中是不同的。

我需要同时获取 Adsense 和 Analytics 数据。所以我需要同时使用这两种服务。我找不到取消声明类的方法。如何同时使用这两项服务?

include_once APP.'Vendor/google-api-php-client/src/Google_Client.php';
$client1 = new Google_Client();
$client1->setApplicationName('aaa');
$client1->setDeveloperKey('1234');
$client1->setRedirectUri('http://example.com/');

include_once APP.'Vendor/google-api-php-client/src/contrib/Google_AdsenseService.php';
$client1->setClientId('2345');
$client1->setClientSecret('4444');
$service1 = new Google_AdsenseService($client1);
// some code that gets data from "$service1"

$client2 = new Google_Client();
$client2->setApplicationName('aaa');
$client2->setDeveloperKey('1234');
$client2->setRedirectUri('http://example.com/');

include_once APP.'Vendor/google-api-php-client/src/contrib/Google_AnalyticsService.php';
$client2->setClientId('4567');
$client2->setClientSecret('5555');
$service2 = new Google_AnalyticsService($client2);
// some code that gets data from "$service2"
4

2 回答 2

1

您可以在 contrib 目录中每个文件的顶部添加不同的命名空间。例如在顶部Google_AdsenseService.php添加文件。namespace Google\AdsenseService;

// Google_AdsenseService.php file
namespace Google\AdsenseService;

只要文件内容仅引用同一文件中的内容,它就可以工作。只有当您访问它时,您才能通过命名空间访问。像这样,

$service1 = new Google\AdsenseService\Google_AdsenseService($client1);
于 2013-01-18T18:41:13.903 回答
0

你有两个选择:

  1. 对于 PHP 5.3+,您可以在文件开头添加命名空间。在此之后,您需要修复修改后的类对其他类的引用(异常将变为 ::Exception 等)

  2. 您可以在文本编辑器中重命名该类,这可能会更容易。只需在您喜欢的文本编辑器中打开文件,然后使用全部替换。将 Google_Client 更改为其他内容。有一个很好的改变,lib 不会使用动态类构造和其他有趣的东西,所以你快速重构的代码可以工作。

于 2013-01-18T18:40:11.330 回答