rikudou/scalar-objects

将标量类型作为对象使用的处理器

v2.0.0-BETA 2019-08-27 15:10 UTC

This package is auto-updated.

Last update: 2024-08-28 02:30:30 UTC


README

此 PHP 库需要从 https://github.com/nikic/scalar_objects 获取 PHP 扩展。

安装

运行 composer require rikudou/scalar-objects

用法

当您包含 composer 自动加载时,处理器会自动注册。这意味着您无需配置即可立即使用它。

由于 IDE 不理解语法,因此提供了类型提示类来帮助您。

示例

<?php

use Rikudou\ScalarObjects\TypeHint\IntegerTypehint;
use Rikudou\ScalarObjects\TypeHint\StringTypehint;

require_once "vendor/autoload.php";

/** @var IntegerTypehint|int $num1 */
$num1 = 5;
/** @var StringTypehint|string $num2 */
$num2 = "10";

// the two variables are not actually objects, the typehints
// are just for IDE completion

var_dump($num1->isInt()); // bool(true)
var_dump($num2->isString()); // bool(true)
var_dump($num2->isNumeric()); // bool(true)
var_dump($num2->isNumber()); // bool(false) - isNumber() returns true only for int and float

var_dump($num1->toString()->length()); // int(1)

/** @var StringTypehint $string */
$string = "This is a test string";

var_dump($string->length()); // int(21);
var_dump($string->capitalize()); // string(21) "This Is A Test String"
var_dump($string->caseInsensitiveCompare("this Is a TESt STRInG")); // int(0)
var_dump($string->toUpper()); // string(21) "THIS IS A TEST STRING"
var_dump($string->toLower()); //string(21) "this is a test string"

如你所见,你可以将标量值作为对象使用。

但您仍然可以像常规标量类型一样使用它们。

<?php

use Rikudou\ScalarObjects\TypeHint\IntegerTypehint;
use Rikudou\ScalarObjects\TypeHint\StringTypehint;

require_once __DIR__."/vendor/autoload.php";

/** @var StringTypehint|string $string */
$string = "test";
$string .= "test"; // works without a problem
var_dump($string); // string(8) "testtest"

/** @var IntegerTypehint|int $int1 */
$int1 = 5;
/** @var IntegerTypehint|int $int2 */
$int2 = -10;
/** @var IntegerTypehint|int $int3 */
$int3 = "-15";

var_dump($int1 + $int2->abs()); // int(15)
var_dump($int1 + $int2); // int(-5)
var_dump($int1 + $int2 + $int3->toInt()->abs()); // int(10)