哪里是创建一个包含所有的应用程序不断变量类的最佳地点?
是: - 引导
- 在应用公共库
例如:1。当我从数据库中检索图像的名字,如果这个记录可是没有图像,我想提出一个默认值的地方,所以我可以在我的模型使用它
**,我在我所有的应用程序中使用常量,所以如果我改变它,我不想回去在我的代码到处更改
哪里是创建一个包含所有的应用程序不断变量类的最佳地点?
是: - 引导
- 在应用公共库
例如:1。当我从数据库中检索图像的名字,如果这个记录可是没有图像,我想提出一个默认值的地方,所以我可以在我的模型使用它
**,我在我所有的应用程序中使用常量,所以如果我改变它,我不想回去在我的代码到处更改
的application.ini例如是最好的地方定义一些常数有
constants.PUBLIC_PATH = APPLICATION_PATH "/../public/"
constants.THEME = blue
然后在你的引导做
protected function setConstants($constants)
{
foreach($constants as $name => $value)
{
if(!defined($name))
define($name, $value);
}
}
ZF采取“常量”从配置和调用setConstants方法在引导文件路过常数因此它的阵列前缀的所有行。
我尽量不使用常量并在全局常量喜欢类常量。 然而,当常数是不可避免的,不管是什么原因,我去的.ini配置文件和Bootstrap /库/模型类常量。
(假设默认ZF项目结构 )
应用/ CONFIGS /的application.ini
constants.MESSAGE_1 = "Message 1"
constants.MESSAGE_2 = "Message 2"
Bootstap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initConstants()
{
$options = $this->getOption('constants');
if (is_array($options)) {
foreach($options as $key => $value) {
if(!defined($key)) {
define($key, $value);
}
}
}
}
// ...
}
示例用法在控制器:
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->message1 = MESSAGE_1;
$this->view->message2 = MESSAGE_2;
}
}
我会在上面延伸,以允许你的常量是如何定义的配置。 例如,您可能希望所有的常量大写与否,以及允许或禁止已定义的常量,因此:
应用/ CONFIGS /的application.ini
constants.forceUppercase = 1
constants.allowAlreadyDefined = 1
constants.set.message_1 = "Message 1"
constants.set.message_2 = "Message 2"
引导:
protected function _initConstants()
{
$options = $this->getOption('constants');
if (isset($options['set']) && is_array($options['set'])) {
if (isset($options['forceUppercase'])
&& (bool) $options['forceUppercase']) {
$options['set'] = array_change_key_case($options['set'], CASE_UPPER);
}
$allowAlreadyDefined = false;
if (isset($options['allowAlreadyDefined'])
&& (bool) $options['allowAlreadyDefined']) {
$allowAlreadyDefined = true;
}
foreach($options['set'] as $key => $value) {
if (!defined($key)) {
define($key, $value);
} elseif (!$allowAlreadyDefined) {
throw new InvalidArgumentException(sprintf(
"'%s' already defined!", $key));
}
}
}
}
可能是你自己的图书馆,或模型类,等等,这取决于。
在引导:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
const MESSAGE_CONSTANT = "Hello World";
// ...
}
示例用法在控制器:
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->message = Bootstrap::MESSAGE_CONSTANT;
}
}