0

我有一个在页面上显示广告的类。我想跟踪显示了哪些广告,所以我在类中添加了一个私有静态成员,该成员将保存一组数字。我想将 db 查询结果中的 ID 添加到静态成员中,以从下一个查询中排除这些 ID。这将防止显示的广告在同一页面上再次显示。

class ADS {
    private static $excluded_ads = array();

    function get_ads() {
        // run db query and assign $ads to the resulting array
        $ads = $this->query();

        // Iterate through result and add the IDs of each row to the static array
        foreach ($ads as $ad) {
            self::$excluded_ads[] = $ad->ID;
        }
    }

    function query() {
        // Use local variable to hold string of excluded ads
        $excluded_ads = $this->sql_get_excluded_ads();

        // run the db query and use the class static member to exclude results
        // SELECT * FROM ....
        // WHERE ...
        // AND p.ID NOT IN ($excluded_ads)
    }

    function sql_get_excluded_ads() {
        if (empty(self::$excluded_ads)){
            return '-1';
        } else {
            return implode(',',self::$excluded_ads);
        }
    }
}

$ads_class = new ADS();
$ads_class->get_ads();

当我加载页面时,我收到该Trying to get property of non-object行的此错误self::$excluded_ads[] = $ad->ID;

静态类成员在 PHP 中是否以这种方式工作?我知道这个值会在每次页面加载时被重置——但这就是我想要的功能。我希望它只包含当前页面/进程的值,然后重置。

4

1 回答 1

0

您是否尝试调试 var_dump($ads) 中的内容?

于 2013-09-28T17:55:33.560 回答