1

Yiiフレームワークは初めてです。私は「YiiとPHPを使ったWebアプリケーション開発」を勉強しています。この本は定数を定義し、それを配列で使用してドロップダウンリストを提供します。 なぜ?なぜそれが価値があるのですか?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',
);

....
}
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.

ちなみに、私はその本のテクニカルレビュアーの1人です(YiiとPHPを使用したWebアプリケーション開発)

于 2013-01-19T16:50:20.370 に答える