74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								declare(strict_types = 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace DASPRiD\EnumTest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use DASPRiD\Enum\AbstractEnum;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @method static self MERCURY()
							 | 
						||
| 
								 | 
							
								 * @method static self VENUS()
							 | 
						||
| 
								 | 
							
								 * @method static self EARTH()
							 | 
						||
| 
								 | 
							
								 * @method static self MARS()
							 | 
						||
| 
								 | 
							
								 * @method static self JUPITER()
							 | 
						||
| 
								 | 
							
								 * @method static self SATURN()
							 | 
						||
| 
								 | 
							
								 * @method static self URANUS()
							 | 
						||
| 
								 | 
							
								 * @method static self NEPTUNE()
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								final class Planet extends AbstractEnum
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    protected const MERCURY = [3.303e+23, 2.4397e6];
							 | 
						||
| 
								 | 
							
								    protected const VENUS = [4.869e+24, 6.0518e6];
							 | 
						||
| 
								 | 
							
								    protected const EARTH = [5.976e+24, 6.37814e6];
							 | 
						||
| 
								 | 
							
								    protected const MARS = [6.421e+23, 3.3972e6];
							 | 
						||
| 
								 | 
							
								    protected const JUPITER = [1.9e+27, 7.1492e7];
							 | 
						||
| 
								 | 
							
								    protected const SATURN = [5.688e+26, 6.0268e7];
							 | 
						||
| 
								 | 
							
								    protected const URANUS = [8.686e+25, 2.5559e7];
							 | 
						||
| 
								 | 
							
								    protected const NEPTUNE = [1.024e+26, 2.4746e7];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Universal gravitational constant.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private const G = 6.67300E-11;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mass in kilograms.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var float
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private $mass;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Radius in meters.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var float
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private $radius;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected function __construct(float $mass, float $radius)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->mass = $mass;
							 | 
						||
| 
								 | 
							
								        $this->radius = $radius;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function mass() : float
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->mass;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function radius() : float
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->radius;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function surfaceGravity() : float
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return self::G * $this->mass / ($this->radius * $this->radius);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function surfaceWeight(float $otherMass) : float
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $otherMass * $this->surfaceGravity();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |