如何最好地初始化这个课程?

时间:2015-11-29 16:29:24

标签: php

在每个脚本开头的我的网站上,我都包含一个" bootstrap"从数据库查询一些东西的脚本,进行一些计算,然后将变量加载到我逐个定义的常量中。

一些例子是:

define("SITE_ID", $site_id); // $site_id is pulled from a field in the database
define("SITE_NAME", $site_name); 
// pulled from a field in the same row as the above
define("STOCK_IDS", $stock_ids); 
//computed array of stock id integers from a different query. 
//I perform logic on the array after the query before putting it in the definition 
define("ANALYTICS_ENABLED", false); 
// this is something I define myself and isnt "pulled" from a database

现在,我在网站上有很多功能。一个示例函数是get_stock_info。它引用了STOCK_IDS常量。

我想要做的是拥有一个具有上述常量的类和get_stock_info函数。

最好的方法是拥有一个空类" site",创建它的实例,然后逐个定义上面的静态变量?或者这不是一个好方法,我应该移动从数据库中提取的所有逻辑并将SITE_ID,STOCK_IDS,ANALYTICS_ENABLED等计算到构造函数中吗?

最终我希望该类包含上述所有信息,然后我就可以使用类方法,例如site :: get_stock_info(),这些方法可以通过self ::或者这个方法访问常量。 / p>

我想做的事情要多得多,但这足以让我完全了解其余部分。

1 个答案:

答案 0 :(得分:1)

我认为这种做法不是最好的。您应该考虑不使用常量,因为您的值不是常量。对于您的情况,最好使用经典的getter方法。

这样的事情:

class SiteInfo
{
    private $siteId;
    private $siteName;
    private $stockIds;
    private $analyticsEnabled;

    public function __construct()
    {
        // Results from the database
        $results = $query->execute();

        $this->siteId = $results['siteId'];
        $this->siteName = $results['siteName'];
        $this->stockIds = $results['stockIds'];
        $this->analyticsEnabled = $results['analyticsEnabled'];
    }

    public function getSiteId()
    {
        return $this->siteId;
    }

    public function getSiteName()
    {
        return $this->siteName;
    }

    public function getStockIds()
    {
        return $this->stockIds;
    }

    public function isAnalyticsEnabled()
    {
        return $this->analyticsEnabled;
    }
}