多次实例化同一个PHP对象

多次实例化同一个PHP对象,php,object,google-analytics-api,Php,Object,Google Analytics Api,是否有可能以一种简化的方式多次实例化同一个类,而不是像我所说的那样 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@gma

是否有可能以一种简化的方式多次实例化同一个类,而不是像我所说的那样

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>
我不确定我是否可以在这里发布链接。。。但是这段代码可以在

上看到,您只需要一个对象就可以访问一个函数。您可以根据需要更改传递给函数的参数

拥有同一类的多个对象不是有效的代码,因为每个对象都会占用那么多额外的内存

所以你只需要,

 $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);
只需一个对象即可访问函数。您可以根据需要更改传递给函数的参数

拥有同一类的多个对象不是有效的代码,因为每个对象都会占用那么多额外的内存

所以你只需要,

 $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);

我假设你的电子邮件地址是相同的,所以你只需要一个对象

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);

无需多次实例化同一对象。

我假设您的电子邮件地址相同,因此您只需要一个对象

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);

不需要多次实例化同一个对象。

好吧,可能有点帮助:

$ga1 = new gapi('XXXX@gmail.com','XXXX');
$ga2 = clone $ga1;

好吧,也许有点帮助:

$ga1 = new gapi('XXXX@gmail.com','XXXX');
$ga2 = clone $ga1;

最大的问题是:多次实例化gapi类有意义吗?这是你试图解决的问题的有效解决方案吗?在大多数情况下,您可以对同一个对象进行数千次实例化,在内存方面不会产生太大的差异。告诉您将所有对象合并到一个实例中的人完全没有理解OOP的要点。如果同一类有多个实例是有意义的,那么不要为了微观优化而更改该类。

最大的问题是:多次实例化gapi类有意义吗?这是你试图解决的问题的有效解决方案吗?在大多数情况下,您可以对同一个对象进行数千次实例化,在内存方面不会产生太大的差异。告诉您将所有对象合并到一个实例中的人完全没有理解OOP的要点。如果同一类有多个实例是合理的,那么不要为了微优化而更改该类。

在您的代码示例中,这些调用实际上是多余的:

$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);
因为没有存储返回值。所以你可以把他们排除在外。这就证明了$ga1到$ga3这三个对象也是不需要的。因此,是的,你可以真正地压缩它,并节省任何这些对象。此外,不需要计算日期时间

您的新文件:

<?php
/* space intentionally left blank */
?>
这个故事的寓意是:只要不说明为什么调用这些函数,就不能说如何改进代码

返回的数据会发生什么情况? 您正在查询不同的API帐户吗?
在您的代码示例中,这些调用实际上是多余的:

$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);
因为没有存储返回值。所以你可以把他们排除在外。这就证明了$ga1到$ga3这三个对象也是不需要的。因此,是的,你可以真正地压缩它,并节省任何这些对象。此外,不需要计算日期时间

您的新文件:

<?php
/* space intentionally left blank */
?>
这个故事的寓意是:只要不说明为什么调用这些函数,就不能说如何改进代码

返回的数据会发生什么情况? 您正在查询不同的API帐户吗?
您的标题和问题不匹配…ga1、ga2、ga3之间的电子邮件地址或第二个参数是否不同?@Bot我假设,因为对象是gapiXXXX@gmail.com是电子邮件地址和XXXX对应的密码是。。。XXX是遗漏:您的标题和问题不匹配……ga1、ga2、ga3之间的电子邮件地址或第二个参数是否不同?@Bot我假设,因为对象是gapiXXXX@gmail.com是电子邮件地址和XXXX对应的密码是。。。XXX遗漏:为什么要克隆同一个对象?如果数据相同,则不需要多次创建同一对象来运行报表数据。Google Analytis返回的ga1 ga2和ga3数据是不同的!按国家/地区划分的访客、按浏览器划分的访客以及过去15天的访客和页面浏览总数您为什么要克隆同一个对象?如果数据相同,则不需要多次创建同一对象来运行报表数据。Google Analytis返回的ga1 ga2和ga3数据是不同的!过去15天内按国家/地区划分的访客、按浏览器划分的访客以及访客和页面浏览量的总和都是细微的挑剔-这可能是真的,但前提是“gapi”类不是有状态的,调用requestReportData会改变其状态。细微的挑剔-这可能是真的,但前提是“gapi”类不是有状态的
调用requestReportData会改变它的状态。我只是想完善代码。。。我以为会更好,但不确定。。。这就是为什么我问:但是你的回答给了我一种解脱的感觉。。。我写这个的时候并没有错。。永远不会少。。。我内心有一种感觉,那就是可以做得更好!我只是想完善代码。。。我以为会更好,但不确定。。。这就是为什么我问:但是你的回答给了我一种解脱的感觉。。。我写这个的时候并没有错。。永远不会少。。。我内心有一种感觉,那就是可以做得更好!谢谢你的回复。1返回的数据在jQuery内联代码中使用3次,以将参数设置为highcharts.js。。。按浏览器,按国家,以及以后。。。在HTML代码中,使用示例2编辑了我的问题,始终只查询1个API帐户。可以查看完整的代码查看源代码,谢谢回复。1返回的数据在jQuery内联代码中使用3次,以将参数设置为highcharts.js。。。按浏览器,按国家,以及以后。。。在HTML代码中,使用示例2编辑了我的问题,始终只查询1个API帐户。可以看到完整的代码查看源代码的问题是如何访问数据,稍后在页面。。。我需要访问它来生成highcharts.js的javascript设置参数中的代码,然后生成HTML表。。。请看这里:问题是如何访问数据,稍后在页面上。。。我需要访问它来生成highcharts.js的javascript设置参数中的代码,然后生成HTML表。。。请看这里: