我是Yii框架的新手。 我正在学习'使用Yii和PHP进行Web应用程序开发'。 本书定义了CONSTANTS并在数组中使用它来提供下拉列表。 的为什么? 它为什么有价值? AND如何将数组定义中的新值归因于CONSTANTS?
这是代码:
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',
);
....
}
答案 0 :(得分:3)
使用常量的替代方法是使用所谓的幻数,即“直接使用代码中的数字”。想象一下,我们正在创建用户注册表单,我们希望限制用户名字段的最大字符数。我们可以这样做:
if (strlen($model->username) > 10){
// username is too long
}
这段代码基本上没有错。当您在多个位置使用相同的值时会出现此问题,例如,当用户更新其详细信息并更改其用户名时。您将再次进行相同的比较。
现在想象一下,由于某种原因,我们认为用户名现在可以是 12 个字符。您必须找到代码中使用此值的所有位置并更新它们。虽然在我们这里的例子中,这不是一个真正的问题,但想象一下在一个巨大的系统上这样做,有数百个对这个值的引用。您不能简单地使用 12 查找并替换值 10 ,因为这几乎肯定会破坏系统。因此,您必须找到并解释此值的每次出现。
在这个值的位置使用常量可以节省我们很多时间,并且可以使更容易理解的代码易于维护。例如:
const MAX_USERNAME_LENGTH = 10;
if (strlen($model->username) > MAX_USERNAME_LENGTH){
// username is too long
}
魔术数字的一个很好的定义是:
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应用程序开发)