PHP'尝试使用静态类成员获取非对象的属性'

时间:2013-09-28 17:47:51

标签: php static-members

我有一个在页面上显示广告的课程。我想跟踪哪些广告已经显示,所以我在类中添加了一个私有静态成员,该成员将保存一组数字。我想将数据库查询结果中的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中以这种方式工作吗?我知道这个值会在每次页面加载时重置 - 但这就是我想要的功能。我希望它只包含当前页面/进程的值,然后重置。

1 个答案:

答案 0 :(得分:0)

你试过调试var_dump($ ads)中的内容吗?