<?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;
preferences:
72.87 ms | 404 KiB | 5 Q