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