<?php
class Distance {
public const UNIT_KILOMETERS = 'kilometers';
public const UNIT_MILES = 'miles';
private const KILOMETERS_IN_1MILE = 1.609344;
private float $distance = 0.0;
private string $unit = self::UNIT_KILOMETERS;
public function __construct(float $distance,
string $unit = self::UNIT_KILOMETERS)
{
$this->set_distance($distance, $unit);
}
public function set_distance($distance, string $unit = ''): object
{
if (empty($unit)) {
$unit = $this->unit;
}
if (!in_array($unit, [self::UNIT_KILOMETERS, self::UNIT_MILES])) {
throw new Exception("Invalid Unit [$unit]");
}
$this->distance = $distance;
$this->unit = $unit;
return $this;
}
public function get_distance(string $unit = ''): float
{
if (empty($unit)) {
$unit = $this->unit;
}
if ($unit == $this->unit) {
return $this->distance;
}
switch ($unit) {
case self::UNIT_KILOMETERS:
return $this->distance * self::KILOMETERS_IN_1MILE;
case self::UNIT_MILES:
return $this->distance / self::KILOMETERS_IN_1MILE;
default:
throw new Exception("Invalid Unit [$unit]");
}
return 0.0;
}
public function distance_format(string $unit = '',
int $decimal_point = 2,
string $decimal_separator = '.',
$thousands_separator = ','): string
{
return number_format($this->get_distance($unit),
$decimal_point,
$decimal_separator,
$thousands_separator) .
" " .
$unit;
}
}
$distance = new Distance(10.0, Distance::UNIT_KILOMETERS);
echo $distance->get_distance() . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_MILES) . PHP_EOL;
echo $distance->distance_format() . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_MILES) . PHP_EOL;
$distance->set_distance(25);
echo $distance->get_distance() . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_MILES) . PHP_EOL;
echo $distance->distance_format() . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_MILES) . PHP_EOL;
$distance->set_distance(10, Distance::UNIT_MILES);
echo $distance->get_distance() . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->get_distance(Distance::UNIT_MILES) . PHP_EOL;
echo $distance->distance_format() . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_KILOMETERS) . PHP_EOL;
echo $distance->distance_format(Distance::UNIT_MILES) . PHP_EOL;
- Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- 10
10
6.2137119223733
10.00
10.00 kilometers
6.21 miles
25
25
15.534279805933
25.00
25.00 kilometers
15.53 miles
10
16.09344
10
10.00
16.09 kilometers
10.00 miles
preferences:
97.41 ms | 407 KiB | 5 Q