从两个不同的文件中重新声明的PHP类



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

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_adseneservice .php"one_answers"Google_AnalyticsService.php"文件都有一个名为Google_Account的类。在这些文件中,Google_Account类的成员变量和函数不同。

我需要得到Adsense和分析数据在同一时间。所以我需要同时使用这两种服务。我找不到取消声明类的方法。我如何同时使用这两种服务?

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"

您可以在贡献目录中的每个文件的顶部添加不同的命名空间。例如,Google_AdsenseService.php文件在顶部添加namespace GoogleAdsenseService;

// Google_AdsenseService.php file
namespace GoogleAdsenseService;

只要文件内容只引用同一文件的内容,它就会起作用。只有当您访问它时,您才能按名称空间访问它。像这样,

$service1 = new GoogleAdsenseServiceGoogle_AdsenseService($client1);

您有两个选择:

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

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

相关内容

  • 没有找到相关文章

最新更新