2017-03-09 2 views
0

phpに洗練されたタイプのライブラリがありますか?洗練されたタイプのライブラリはphpにはありますか?

function getAge(int positive $age){ 
... 
} 

getAge(-1) // error -1 < 0 

ありがとうございます!

+0

PHPで符号付きまたは符号なしの整数を宣言する方法について聞いたことがありません。ちょうど小切手を置くか、ヘルパーメソッドを作成するだけです。 –

+0

実際には、BC Mathライブラリ(http://www.php.net/manual/en/intro.bc.php)を二重にチェックしています。これはPHP開発者として5年間使用する必要はありませんでしたが、それは役に立つかもしれません。 –

+1

リファインメントタイプはコアの一部ではありません。 UIntまたはAge Typeを作成し、タイプヒントでそれを期待できます。チェックと例外は、オブジェクトのコンストラクタで発生します。 'function getAge(Age $ age){}; $ input = -1; {$ age = new Age($ input); } catch(... //この[Java-Example]のような例外をスローする(http://stackoverflow.com/questions/4899562/prevent-negative-numbers-for-age-without-using-client-side-validation #answer-4899590) – pce

答えて

1

エンジンレベルでリファインメントタイプを実装する必要があります。誰もまだこれをしなかった。

またはhttp://github.com/marcioAlmada/yayのようなユーザーランドプリプロセッサを使用してください。

洗練されたタイプを値オブジェクトとして実装します。

class PositiveInteger 
{ 
    private $value; 

    public static function assertValid(int $value) { 
     if ($value < 0) { 
      throw new InvalidArgumentException("Not positive"); 
     } 
    } 

    public function __construct(int $value) 
    { 
     static::assertValid($value); 
     $this->value = $value; 
    } 

    public function getValue(): int 
    { 
     return $this->value; 
    } 

    public function __toString(): string 
    { 
     return (string) $this->value; 
    } 
} 

しかし、これはスカラーではなくスカラーを使用するのと同じ方法で使用できないことを意味します。すべての操作はメソッドである必要があります。あなたはもう$age++を行うことができなくなります。

関連する問題