-1

こんにちは、私のコードは非常に単純で、学習演習としてオブジェクト指向アプローチを使用しようとしていましたが、クラスを識別して実装するのは少し混乱しています

したがって、現在のプログラムには関数があり、特定のタスクが1か月間にユーザーにかかる時間と残りの時間を計算していました。

例えば function timeremaining ($dob, $task1start=null, $task1end=null, $item2start=null, $task2end=null)

オブジェクト指向プログラミングで似たようなことをしようとしていた場合、次のようなものを使用すると思いますが、よくわかりません:

class person extends task { 
  public $age; 
  public $name; 
  public $phoneno ;
  public $totaltimethismonth;
} 

class task extends time{ 
  public $name ; 
  public $timefrom; 
  public $timeto;

  public function getDuration($name,$timefrom,$timeto)
  {
    list($hours, $minutes) = explode(':', $timefrom);
    $startTimestamp = mktime($hours, $minutes);

    list($hours, $minutes) = explode(':', $timeto);
    $endTimestamp = mktime($hours, $minutes);

    $seconds = $endTimestamp - $startTimestamp;
    $totaldurationinseconds=$totalsecondsinday - $seconds;
    return $totaldurationinseconds;
  }
} 

class time { 
  public $hours ; 
  public $minutes; 
  public $seconds;
  //not sure if time should be used?
}

$newperson = new person;

$duration=$newperson->getDuration("gardening","10:00","17:00");
$totaltime=$newperson->totaltimethismonth;
echo "remaing time this month is $totaltime-$duration;

どんな助けでも大歓迎です

4

1 に答える 1

1

これは、アプリケーションに何をさせたいかについてのより詳細な説明がなければ、答えるのがやや難しいです。ただし、いくつかの問題を指摘することはできます。

継承の使い方が間違っています。継承は、「is a」関係を意味します。タスクは時間ではなく、人はタスクではありません。代わりに、Task には時間があり、Person にはタスクがあります。「has a」は構成を意味します。

getDuration が引数を取る理由がわかりません。オブジェクトにはすでに time from と time to があるので、

public function getDuration() {
    $duration = $this->timeFrom ... $this->timeTo ...
    return $duration;
}

Person クラスは、タスク フィールドをループして $task->getDuration() から取得したすべての値を合計する getTotalTask​​Time メソッドを持つことができます。

また、おそらくフィールドを非公開または保護したいと思うでしょう。それらはコンストラクターを介して設定できます。getter を介して取得します。また、変更できるようにする必要がある場合は、セッターを追加できます(ただし、不変性である優れたプロパティが失われます)

于 2013-03-05T02:53:52.150 に答える