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

次の 2 つのオプションがあります。

  1. PHP 5.3 以降では、ファイルの先頭に名前空間を追加できます。この後、修正したクラスから他のクラスへの参照を修正する必要があります(Exception は ::Exception になります)。

  2. テキスト エディタでクラスの名前を変更できます。これはおそらく簡単です。お気に入りのテキスト エディターでファイルを開き、すべて置換を使用します。Google_Client を別のものに変更します。ライブラリが動的クラス構築やその他の面白いものを使用しないという良い変更があるため、すぐにリファクタリングされたコードが機能します。

于 2013-01-18T18:40:11.330 に答える