# phpman > perldoc > Type::Tiny::Class

## NAME
    [Type::Tiny::Class](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AClass/markdown) - type constraints based on the "isa" method

## STATUS
    This module is covered by the Type-Tiny stability policy.

## DESCRIPTION
    Type constraints of the general form "{ $_->isa("[Some::Class](https://www.chedong.com/phpMan.php/perldoc/Some%3A%3AClass/markdown)") }".

    This package inherits from [Type::Tiny](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny/markdown); see that for most documentation.
    Major differences are listed below:

### Constructor
    "new"
        When the constructor is called on an *instance* of
        [Type::Tiny::Class](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AClass/markdown), it passes the call through to the constructor of
        the class for the constraint. So for example:

           my $type = [Type::Tiny::Class](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AClass/markdown)->new(class => "[Foo::Bar](https://www.chedong.com/phpMan.php/perldoc/Foo%3A%3ABar/markdown)");
           my $obj  = $type->new(hello => "World");
           say ref($obj);   # prints "[Foo::Bar](https://www.chedong.com/phpMan.php/perldoc/Foo%3A%3ABar/markdown)"

        This little bit of DWIM was borrowed from
        [MooseX::Types::TypeDecorator](https://www.chedong.com/phpMan.php/perldoc/MooseX%3A%3ATypes%3A%3ATypeDecorator/markdown), but [Type::Tiny](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny/markdown) doesn't take the idea
        quite as far.

### Attributes
    "class"
        The class for the constraint.

    "constraint"
        Unlike [Type::Tiny](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny/markdown), you *cannot* pass a constraint coderef to the
        constructor. Instead rely on the default.

    "inlined"
        Unlike [Type::Tiny](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny/markdown), you *cannot* pass an inlining coderef to the
        constructor. Instead rely on the default.

    "parent"
        Parent is automatically calculated, and cannot be passed to the
        constructor.

### Methods
    "plus_constructors($source, $method_name)"
        Much like "plus_coercions" but adds coercions that go via a
        constructor. (In fact, this is implemented as a wrapper for
        "plus_coercions".)

        Example:

           package [MyApp::Minion](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3AMinion/markdown);

           use Moose; extends "[MyApp::Person](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3APerson/markdown)";

           use [Types::Standard](https://www.chedong.com/phpMan.php/perldoc/Types%3A%3AStandard/markdown) qw( HashRef Str );
           use [Type::Utils](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3AUtils/markdown) qw( class_type );

           my $Person = class_type({ class => "[MyApp::Person](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3APerson/markdown)" });

           has boss => (
              is     => "ro",
              isa    => $Person->plus_constructors(
                 HashRef,     "new",
                 Str,         "_new_from_name",
              ),
              coerce => 1,
           );

           package main;

           [MyApp::Minion](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3AMinion/markdown)->new(
              ...,
              boss => "Bob",  ## via [MyApp::Person](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3APerson/markdown)->_new_from_name
           );

           [MyApp::Minion](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3AMinion/markdown)->new(
              ...,
              boss => { name => "Bob" },  ## via [MyApp::Person](https://www.chedong.com/phpMan.php/perldoc/MyApp%3A%3APerson/markdown)->new
           );

        Because coercing "HashRef" via constructor is a common desire, if
        you call "plus_constructors" with no arguments at all, this is the
        default.

           $classtype->plus_constructors(HashRef, "new")
           $classtype->plus_constructors()  ## identical to above

        This is handy for Moose/Mouse/Moo-based classes.

    "stringifies_to($constraint)"
        See [Type::Tiny::ConstrainedObject](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AConstrainedObject/markdown).

    "numifies_to($constraint)"
        See [Type::Tiny::ConstrainedObject](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AConstrainedObject/markdown).

    "with_attribute_values($attr1 => $constraint1, ...)"
        See [Type::Tiny::ConstrainedObject](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AConstrainedObject/markdown).

## BUGS
    Please report any bugs to
    <<https://github.com/tobyink/p5-type-tiny/issues>>.

## SEE ALSO
    [Type::Tiny::Manual](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny%3A%3AManual/markdown).

    [Type::Tiny](https://www.chedong.com/phpMan.php/perldoc/Type%3A%3ATiny/markdown).

    [Moose::Meta::TypeConstraint::Class](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint%3A%3AClass/markdown).

## AUTHOR
    Toby Inkster <<tobyink@cpan.org>>.

## COPYRIGHT AND LICENCE
    This software is copyright (c) 2013-2014, 2017-2021 by Toby Inkster.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

## DISCLAIMER OF WARRANTIES
    THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

