首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Yii中使用常量和数组定义下拉列表。

问在Yii中使用常量和数组定义下拉列表。
EN

Stack Overflow用户
提问于 2013-01-18 20:08:14
回答 1查看 1.2K关注 0票数 1

我对Yii框架很陌生。我正在学习“用Yii和PHP开发Web应用程序”。本书定义常量,并在数组中使用它来提供下拉列表.为什么?为什么它有价值?以及它如何将数组定义中的新值赋予常量?

这是代码:

代码语言:javascript
复制
class Issue extends CActiveRecord{
....

const TYPE_BUG=0;
const TYPE_FEATURE=1;
const TYPE_TASK=2;
public function getTypeOptions()
{
return array(
self::TYPE_BUG=>'Bug',
self::TYPE_FEATURE=>'Feature',
self::TYPE_TASK=>'Task',
);

....
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-19 16:50:20

使用常量的替代方法是使用所谓的神奇数字,即“直接使用代码中的数字”。假设我们正在创建一个用户注册表单,并且我们希望限制用户名字段的最大字符数。我们可以这样做:

代码语言:javascript
复制
if (strlen($model->username) > 10){
    // username is too long
}

从本质上讲,这段代码没有什么问题。当您在多个地方使用相同的值时,例如当用户更新他们的详细信息和更改他们的用户名时,问题就出现了。你又会有同样的比较。

现在想象一下,由于某种原因,我们决定用户名现在可以是12字符长。您必须找到代码中使用此值的所有位置并更新它们。虽然在这里的示例中,这并不是一个真正的问题,但是想象一下在一个具有数百个引用这个值的大型系统上这样做。您不能简单地找到10值并将其替换为12,因为这几乎肯定会破坏系统。因此,您必须找到并解释该值的每一次发生。

在这个值的位置上使用一个常量将节省我们很多时间,并且会使更易于维护的代码变得更容易理解。例:

代码语言:javascript
复制
const MAX_USERNAME_LENGTH = 10;

if (strlen($model->username) > MAX_USERNAME_LENGTH){
    // username is too long
}

魔术数字的一个很好的定义是:

代码语言:javascript
复制
The term magic number also refers to the bad programming practice of using
numbers directly in source code without explanation. In most cases this makes
programs harder to read, understand, and maintain. Although most guides make an
exception for the numbers zero and one, it is a good idea to define all other
numbers in code as named constants.

作为附带说明,我是这本书(用Yii和PHP开发Web应用程序)的技术评论员之一。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14406849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档