PHP 4の例を使用して、次の関数のシグネチャを見てくださいmktime()
。
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
分かりにくいと思いませんか?この関数は「時間の作成」と呼ばれますが、3つの時間パラメーターだけでなく、日、月、年のパラメーターを取ります。彼らがどの順番に入ったのかを覚えるのはどれくらい簡単ですか?表示されたらどうしますmktime(1, 2, 3, 4, 5, 2246);
か?他に言及することなく、それを理解できますか?2246
24時間の「22:46」と解釈されますか?他のパラメーターはどういう意味ですか?オブジェクトとしては良いでしょう。
PHP 5に移行すると、DateTimeオブジェクトがあります。そのメソッドには、と呼ばれる2つのメソッドがsetDate()
ありsetTime()
ます。その署名は次のとおりです。
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )
パラメーターの順序が最大から最小に変わることをまだ覚えておく必要がありますが、それは大きな改善です。6つのパラメーターすべてを一度に設定できる単一のメソッドはないことに注意してください。これを行うには、2つの別個の呼び出しを行う必要があります。
ボブおじさんが言っているのは、平らな構造を避けることです。関連するパラメーターは1つのオブジェクトにグループ化する必要があります。パラメーターが3つ以上ある場合は、そこに疑似オブジェクトがある可能性が高いため、適切なオブジェクトを作成してさらに分離することができます。PHPは別の持っていませんがDate
とTime
クラスを、あなたがすることを検討することもできDateTime
、本当に含まれているDate
オブジェクトとTime
オブジェクトを。
次のような構造になる可能性があります。
<?php
$my_date = new Date;
$my_date->setDay(5);
$my_date->setMonth(4);
$my_date->setYear(2246);
$my_time = new Time;
$my_time->setHour(1);
$my_time->setMinute(2);
$my_time->setSecond(3);
$my_date_time = new DateTime;
$my_date_time->setTime($my_time);
$my_date_time->setDate($my_date);
?>
毎回2つまたは3つのパラメーターを設定することは必須ですか?時間または日だけを変更したい場合は、簡単に変更できます。はい、各パラメーターが他のパラメーターと連動することを確認するためにオブジェクトを検証する必要がありますが、とにかく以前はそうでした。
最も重要なことは、理解しやすく、したがって保守しやすいですか?一番下のコードブロックは単一のmktime()
関数よりも大きいですが、理解しやすいと私は主張します。プログラマーでなくても、それが何をするのかを問題なく解決できます。目標は、常に短いコードまたは賢いコードではなく、より保守可能なコードです。
ああ、グローバルを使用しないでください!
postLetter(string country, string town, string postcode, string streetAddress, int appartmentNumber, string careOf)
、の臭いバージョンである提案の多くですpostLetter(Address address)
。本を読み続けてください、そういうことを願っています。