-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

如果没有更详细地描述您希望您的应用程序做什么,这有点难以回答。不过我可以指出一些问题。

您错误地使用了继承。继承意味着“是”关系。任务不是时间,人也不是任务。相反,一个任务有时间,一个人有任务。“有”意味着组合。

不知道为什么 getDuration 正在接受参数。你已经有时间在你的对象中,所以可以

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

然后,Person 类可以有一个 getTotalTask​​Time 方法,该方法循环遍历任务字段并将您从 $task->getDuration() 获得的所有值相加。

而且,您可能希望将您的字段设为私有或受保护。它们可以通过构造函数设置。并通过吸气剂获得。如果你也需要能够修改,你可以添加设置器(尽管这样你会失去不变性的好属性)

于 2013-03-05T02:53:52.150 回答