1

これ以外の簡単な方法で同じクラスを複数回インスタンス化することは可能ですか?

include ("php/functions.php");

date_default_timezone_set('Europe/Lisbon');

require 'php/gapi.class.php';
$ga1 = new gapi('XXXX@gmail.com','XXXX');
$ga2 = new gapi('XXXX@gmail.com','XXXX');
$ga3 = new gapi('XXXX@gmail.com','XXXX');

$ga1->requestReportData( $report_id = XXXX, $dimension = array('browser'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visitors', $filter = 'browser == Firefox || browser == Chrome || browser == Internet Explorer || browser == Safari || browser == Opera && visits > 10', $start_date = '2012-10-17' );

$ga2->requestReportData( $report_id = XXXX, $dimension = array('country'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visits', $filter = 'country != (not set) && visits > 3', $start_date = '2012-10-17', null, null, 10 );

$date2 = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-15, date("Y")));
$today = date('Y-m-d');
$ga3->requestReportData($report_id = XXXX, $dimension = array('date'), $metrics = array('pageviews','visits'), $sort_metric = array('date')  , $filter = '',$date2,$today, null,15);

PS:このコードは意図したとおりに機能します...これを達成するためのより効率的な方法があるかどうか疑問に思っていました...

編集:提供されたソリューションのいくつかについて行われたいくつかの質問に答えるために、同じファイルの数百行後のアプリケーションの例を次に示します。

      <h2 class="verde">By country (10 relvant results)</h2>
      [useless code ommited...]
      <tbody>
        <?php
        $tp = 0;
        foreach($ga2->getResults() as $r2){
          if($tp==10) break;
        ?>
        <tr>
          <td><?php echo $r2 ?></td>
          <td><?php echo $r2->getVisitors() ?></td>
          <td><?php echo $r2->getVisits() ?></td>
          <td><?php echo $r2->getPageviews() ?></td>
        </tr>
        <?php
        $tp++;
        }
        ?>
        <tr style="font-weight:700">
          <td><strong>TOTAIS</strong></td>
          <td><strong><?php echo $ga2->getVisitors() ?></strong></td>
          <td><strong><?php echo $ga2->getVisits() ?></strong></td>
          <td><strong><?php echo $ga2->getPageviews() ?></strong></td>
        </tr>
      </tbody>

ここにリンクを投稿できるかどうかはわかりません...しかし、このコードはhttp://jb.utad.pt/gapi/で見ることができます

4

5 に答える 5

4

one object関数にアクセスする必要があります。必要に応じて、関数に渡されるパラメーターを変更できます。

同じクラスを持つことmultiple objectsは、各オブジェクトがそれだけの余分なメモリを消費するため、効率的なコードではありません。

したがって、必要なのは

 $ga = new gapi('XXXX@gmail.com','XXXX');
 $ga->requestReportData( $report_id = XXXX, $dimension = array('browser'), $metrics =   array('visitors','pageviews','visits'), $sort_metric = '-visitors', $filter = 'browser == Firefox || browser == Chrome || browser == Internet Explorer || browser == Safari || browser == Opera && visits > 10', $start_date = '2012-10-17' );
 $ga->requestReportData( $report_id = XXXX, $dimension = array('country'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visits', $filter = 'country != (not set) && visits > 3', $start_date = '2012-10-17', null, null, 10 );
 $date2 = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-15, date("Y")));
 $today = date('Y-m-d');
 $ga->requestReportData($report_id = XXXX, $dimension = array('date'), $metrics = array('pageviews','visits'), $sort_metric = array('date')  , $filter = '',$date2,$today, null,15);
于 2012-11-09T15:52:15.833 に答える
0

私はあなたのメールアドレスが同じであると仮定しているので、あなたはただ一つのオブジェクトを必要とします。

include ("php/functions.php");

date_default_timezone_set('Europe/Lisbon');

require 'php/gapi.class.php';
$ga1 = new gapi('XXXX@gmail.com','XXXX');

$ga1->requestReportData( $report_id = XXXX, $dimension = array('browser'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visitors', $filter = 'browser == Firefox || browser == Chrome || browser == Internet Explorer || browser == Safari || browser == Opera && visits > 10', $start_date = '2012-10-17' );

$ga1->requestReportData( $report_id = XXXX, $dimension = array('country'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visits', $filter = 'country != (not set) && visits > 3', $start_date = '2012-10-17', null, null, 10 );

$date2 = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-15, date("Y")));
$today = date('Y-m-d');
$ga1->requestReportData($report_id = XXXX, $dimension = array('date'), $metrics = array('pageviews','visits'), $sort_metric = array('date')  , $filter = '',$date2,$today, null,15);

同じオブジェクトを複数回インスタンス化する必要はありません。

于 2012-11-09T15:55:30.443 に答える
0

まあ、少し役立つかもしれません:

$ga1 = new gapi('XXXX@gmail.com','XXXX');
$ga2 = clone $ga1;
于 2012-11-09T15:56:02.593 に答える
0

最大の質問は、gapiクラスを複数回インスタンス化することは意味がありますか?それはあなたが解決しようとしている「問題」の有効な解決策ですか?ほとんどの場合、同じオブジェクトを何千回もインスタンス化できますが、それほど大きな違いはありません(メモリに関して)。すべてのオブジェクトを1つのインスタンスに統合するように指示している人々は、OOPのポイントを完全に失っています。同じクラスの複数のインスタンスを持つことが理にかなっている場合は、マイクロ最適化のためにそのクラスを変更しないでください。

于 2012-11-09T16:00:33.643 に答える
0

コード例では、実際にはこれらの呼び出しは不要です。

$ga1->requestReportData( $report_id = XXXX, $dimension = array('browser'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visitors', $filter = 'browser == Firefox || browser == Chrome || browser == Internet Explorer || browser == Safari || browser == Opera && visits > 10', $start_date = '2012-10-17' );
$ga2->requestReportData( $report_id = XXXX, $dimension = array('country'), $metrics = array('visitors','pageviews','visits'), $sort_metric = '-visits', $filter = 'country != (not set) && visits > 3', $start_date = '2012-10-17', null, null, 10 );
$ga3->requestReportData($report_id = XXXX, $dimension = array('date'), $metrics = array('pageviews','visits'), $sort_metric = array('date')  , $filter = '',$date2,$today, null,15);

戻り値が保存されていないためです。だからあなたはそれらを省くことができます。その結果、3つのオブジェクトも必要ない$ga1こと$ga3がわかります。そうです、あなたはそれを本当にコンパクトにして、それらのオブジェクトのどれでも惜しまないことができます。また、日時の計算は必要ありません。

新しいファイル:

<?php
/* space intentionally left blank */
?>

話の教訓:これらの関数を呼び出す理由を示さない限り、コードを改善する方法を言うことはできません。

  1. 返されたデータはどうなりますか?
  2. 別のAPIアカウントにクエリを実行していますか?
于 2012-11-09T16:02:54.673 に答える