1

我是 Yii 框架的新手。我正在学习“使用 Yii 和 PHP 进行 Web 应用程序开发”。本书定义了 CONSTANTS 并在一个数组中使用它来提供一个下拉列表。 为什么?为什么有价值?以及它如何将数组定义中的新值归因于 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',
);

....
}
4

1 回答 1

3

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

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

那段代码基本上没有错。当您在多个地方使用相同的值时会出现问题,例如当用户更新他们的详细信息并更改他们的用户名时。您将再次进行相同的比较。

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

使用常量代替这个值可以节省大量时间,并使代码更易理解、更易于维护。例如:

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.

作为旁注,我是该书的技术审阅者之一(Web Application Development with Yii and PHP)

于 2013-01-19T16:50:20.370 回答