ts/dataobject

此包已被废弃,不再维护。未建议替代包。

PHP中的简单数据对象和枚举。

此包尚未发布任何版本,可用的信息很少。


README

PHP中的简单数据对象和枚举。

需求

我的所有组件都需要PHP >= 5.4。

安装

使用 Composer 安装: composer require ts/dataobject:~2.0

基本示例

当您需要定义一组值,这些值理想上应该能够进行类型提示时,可以使用枚举,例如,在以下示例中使用HTTP中实现的常见请求方法

use TS\DataObject\Multiton\Enumeration;

final class RequestMethod extends Enumeration
{
    const CONNECT = 'CONNECT';
    const DELETE  = 'DELETE';
    const GET     = 'GET';
    const HEAD    = 'HEAD';
    const OPTIONS = 'OPTIONS';
    const POST    = 'POST';
    const PUT     = 'PUT';
    const TRACE   = 'TRACE';
}

使用 final 关键字强制枚举不能进一步扩展。现在,如果您想使用这些预定义的常量之一,您可以这样调用它们

function handleRequest(RequestMethod $method, ...) { ... }

// Give a specific instance of the enumeration to the function
$response = handleRequest(RequestMethod::GET(), ...);

多例示例

多例 类似于 Java 的枚举,可以包含更多逻辑,可以有自己的方法、常量等,但仍然定义一组固定的实例。

看看这个使用我们太阳系行星的常见示例

use TS\DataObject\Multiton\Multiton;

final class Planet extends Multiton
{
    /**
     * Gravitational constant.
     *
     * @var float
     */
    const G = 6.67300E-11;

    /**
     * @var float
     */
    private $mass;

    /**
     * @var float
     */
    private $radius;

    /**
     * Array that defines each instance's data.
     *
     * @var array
     */
    protected static $data = [
        ['MERCURY', 3.302e23,  2.4397e6],
        ['VENUS',   4.869e24,  6.0518e6],
        ['EARTH',   5.9742e24, 6.37814e6],
        ['MARS',    6.4191e23, 3.3972e6],
        ['JUPITER', 1.8987e27, 7.1492e7],
        ['SATURN',  5.6851e26, 6.0268e7],
        ['URANUS',  8.6849e25, 2.5559e7],
        ['NEPTUNE', 1.0244e26, 2.4764e7],
        // Poor Pluto =(
        // ['PLUTO', 1.31e22, 1.180e6],
    ];

    /**
     * @param string $key
     * @param float  $mass
     * @param float  $radius
     */
    protected function __construct($key, $mass, $radius)
    {
        parent::__construct($key);

        $this->mass   = $mass;
        $this->radius = $radius;
    }

    /**
     * @return float
     */
    public function getSurfaceGravity()
    {
        return self::G * $this->mass / ($this->radius * $this->radius);
    }

    /**
     * @param float $otherMass
     *
     * @return float
     */
    public function getSurfaceWeight($mass)
    {
        return $mass * $this->getSurfaceGravity();
    }
}

计算您在另一颗行星上的体重现在只需调用

$weight     = 175;
$mass       = $weight / Planet::EARTH()->getSurfaceGravity();
$marsWeight = Planet::MARS()->getSurfaceWeight($mass); // 66.279359