清除問題:配置容器相對全局define()
ed配置參數的優點是什麼?
的優點是所有OOP提供的優勢:數據抽象和封裝,繼承,多態性和更好的設計模式整合。
這個帖子的讀者似乎有點困惑,並且專注於你的課而不是主要問題。也clearify這一點,讓我給你舉個例子:
class Configuration
{
protected $someValue;
}
class ConfigurationDev extends Configuration
{
protected $baseUrl = 'http://devel.yoursite.com/';
}
class ConfigurationLive extends Configuration
{
protected $baseUrl = 'http://www.yoursite.com/';
}
的index.php:
<?php
$config = new ConfigurationDev;
$tracking = new Tracking($config);
...
類跟蹤:
class Tracking
{
public function __construct(\Configuration $config) {
if ($config instanceof \ConfigurationLive) {
// We are in live environment, do track
} else {
// Debug Notice: We are NOT in live environment, do NOT track
}
}
}
方案的說明:
想象一下,您想要跟蹤用戶,但只能在實時系統上,不在你的開發系統上。 Tracking類需要一個實時配置,但如果它不是實時配置,則會中止(不受影響)。
您的班級const
不是最好的,因爲const
意味着您不想更改變量。不要將變量用於可能更改的值。你不應該使用靜態的東西,因爲它大多與依賴注入衝突。傳遞實物!
您的函數public static function getValueDependingOnURL()
應放置在Helper類中,而不是放在Constant/Configuration容器中。
class Helper
{
protected $config;
public function __construct(\Configuration $config) {
$this->config = $config;
return $this;
}
public function getValueByUrl($url) {
if ($url == 'something') {
return $config->getMinValue();
} else {
return $config->getMaxValue();
}
}
}
現在你可以有多個不同的配置,其助手類依賴於:
$config = new ConfigurationLive;
$helper = new Helper($config);
$value = $helper->getValueByUrl($_SERVER['REQUEST_URI']);
有大量的最佳實踐設計模式的東西,代碼風格和OOP在我的例子,瞭解這些信息,你將獲得比你的問題的讀者更高的軟件工程水平。祝你好運!
爲什麼要有靜態方法?常量:: MIN_VALUE將完全相同。 – vascowhite
@vascowhite請參閱編輯 – Pattle
這沒有任何意義。 – vascowhite