我有以下代码。当我运行它时,我收到错误:
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和Google 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"
答案 0 :(得分:1)
您可以在contrib目录中的每个文件的顶部添加不同的命名空间。例如,Google_AdsenseService.php
文件在顶部添加namespace Google\AdsenseService;
。
// Google_AdsenseService.php file
namespace Google\AdsenseService;
只要文件内容仅引用同一文件中的内容,它就会起作用。只有当您访问它时,才能通过命名空间访问。像这样,
$service1 = new Google\AdsenseService\Google_AdsenseService($client1);
答案 1 :(得分:0)
您有两种选择:
对于PHP 5.3+,您可以在文件的开头添加命名空间。在此之后,您需要修复对已修改类中其他类的引用(Exception将变为:: Exception等)
您可以在文本编辑器中重命名该类,这可能会更容易。只需在您喜欢的文本编辑器中打开文件,然后使用replace all。将Google_Client更改为其他内容。有一个很好的变化,lib不会使用动态类构造和其他有趣的东西,所以你快速重构的代码将起作用。