Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
24 / 24 |
MicroSecondTime | |
100.00% |
1 / 1 |
|
100.00% |
9 / 9 |
18 | |
100.00% |
24 / 24 |
__construct | |
100.00% |
1 / 1 |
10 | |
100.00% |
9 / 9 |
|||
setMicrotimeString | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
__toString | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
add | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
subtract | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
toSecond | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
toMillis | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getUsec | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getSec | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
<?php | |
/** | |
* μ秒を上手に扱う | |
*/ | |
namespace Puyo\Time; | |
/** | |
* MicrosecondTime | |
*/ | |
class MicroSecondTime | |
{ | |
/** | |
* Microsecond part. | |
* | |
* 0.12345678 | |
* @var float | |
*/ | |
private $_usec = 0.0; | |
/** | |
* Second part. | |
* | |
* 1234567890 | |
* @var float | |
*/ | |
private $_sec = 0.0; | |
/** | |
* Constructor | |
* | |
* overloadをしているため,複数の引数を取ります。 | |
* <pre> | |
* 1. __construct(float $usec, float $sec) | |
* 2. __construct(string strMicrotime) | |
* 3. __construct(void) | |
* </pre> | |
* | |
* @param mixed $arg1 | |
* @param float $arg2 | |
* @throws \InvalidArgumentException | |
*/ | |
public function __construct($arg1 = null, $arg2 = null) { | |
// Pseudo overload | |
if (isset($arg1) && is_float($arg1) && isset($arg2) && is_float($arg2)) { | |
// 1. __construct(float $usec, float $sec) | |
$this->_usec = $arg1; | |
$this->_sec = $arg2; | |
} elseif (isset($arg1) && is_string($arg1) && is_null($arg2)) { | |
// 2. __construct(string strMicrotime) | |
$this->setMicrotimeString($arg1); | |
} elseif ($arg1 === null && $arg2 === null) { | |
// 3. __construct(void) | |
$this->setMicrotimeString(microtime()); | |
} else { | |
throw new \InvalidArgumentException(); | |
} | |
} | |
/** | |
* 文字列(microtime() の結果)から設定する。 | |
* @param string $strMicrotime | |
*/ | |
protected function setMicrotimeString($strMicrotime) { | |
list($usec, $sec) = explode(" ", $strMicrotime); | |
$this->_usec = (float)$usec; | |
$this->_sec = (float)$sec; | |
} | |
/** | |
* microtime() の書式で出力する | |
* @return string 文字列表現 | |
*/ | |
public function __toString() { | |
return $this->_usec . ' ' . $this->_sec; | |
} | |
/** | |
* 加算して返す | |
* @param self $microTime | |
* @return self | |
*/ | |
public function add(self $microTime) { | |
$newUsec = $this->_usec + $microTime->getUsec(); | |
$newSec = $this->_sec + $microTime->getSec(); | |
return new self($newUsec, $newSec); | |
} | |
/** | |
* 減算して返す | |
* @param self $microTime | |
* @return self | |
*/ | |
public function subtract(self $microTime) { | |
$newUsec = $this->_usec - $microTime->getUsec(); | |
$newSec = $this->_sec - $microTime->getSec(); | |
return new self($newUsec, $newSec); | |
} | |
/** | |
* 秒単位にして返す | |
* @return float | |
*/ | |
public function toSecond() { | |
return $this->_usec + $this->_sec; | |
} | |
/** | |
* ミリ秒単位にして返す | |
* @return float | |
*/ | |
public function toMillis() { | |
return floor($this->_usec * 1000) + $this->_sec * 1000; | |
} | |
/** | |
* マイクロ秒部分を返す | |
* @return float | |
*/ | |
public function getUsec() { | |
return $this->_usec; | |
} | |
/** | |
* 秒部分を返す | |
* @return float | |
*/ | |
public function getSec() { | |
return $this->_sec; | |
} | |
} |