在每个脚本开头的我的网站上,我都包含一个" 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>
我想做的事情要多得多,但这足以让我完全了解其余部分。
答案 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;
}
}