Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb7f126c

Browse files
committed
Merge branch '7.2' into 7.3
* 7.2: Minor reword Add more details to TypeInfo documentation
2 parents49965fb +405f95e commitb7f126c

File tree

1 file changed

+104
-4
lines changed

1 file changed

+104
-4
lines changed

‎components/type_info.rst

Lines changed: 104 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,24 @@ to the :class:`Symfony\\Component\\TypeInfo\\Type` static methods as following::
4040
// Many others are available and can be
4141
// found in Symfony\Component\TypeInfo\TypeFactoryTrait
4242

43-
The second way of using the component is to use ``TypeInfo`` to resolve a type
44-
based on reflection or a simple string::
43+
Resolvers
44+
~~~~~~~~~
45+
46+
The second way to use the component is by using ``TypeInfo`` to resolve a type
47+
based on reflection or a simple string. This approach is designed for libraries
48+
that need a simple way to describe a class or anything with a type::
4549

4650
use Symfony\Component\TypeInfo\Type;
4751
use Symfony\Component\TypeInfo\TypeResolver\TypeResolver;
4852

53+
class Dummy
54+
{
55+
public function __construct(
56+
public int $id,
57+
) {
58+
}
59+
}
60+
4961
// Instantiate a new resolver
5062
$typeResolver = TypeResolver::create();
5163

@@ -70,6 +82,94 @@ Each of these calls will return you a ``Type`` instance that corresponds to the
7082
static method used. You can also resolve types from a string (as shown in the
7183
``bool`` parameter of the previous example)
7284

73-
..note::
85+
PHPDoc Parsing
86+
~~~~~~~~~~~~~~
87+
88+
In many cases, you may not have cleanly typed properties or may need more precise
89+
type definitions provided by advanced PHPDoc. To achieve this, you can use a string
90+
resolver based on the PHPDoc annotations.
91+
92+
First, run the command ``composer require phpstan/phpdoc-parser`` to install the
93+
PHP package required for string resolving. Then, follow these steps::
7494

75-
To support raw string resolving, you need to install ``phpstan/phpdoc-parser`` package.
95+
use Symfony\Component\TypeInfo\TypeResolver\TypeResolver;
96+
97+
class Dummy
98+
{
99+
public function __construct(
100+
public int $id,
101+
/** @var string[] $tags */
102+
public array $tags,
103+
) {
104+
}
105+
}
106+
107+
$typeResolver = TypeResolver::create();
108+
$typeResolver->resolve(new \ReflectionProperty(Dummy::class, 'id')); // returns an "int" Type
109+
$typeResolver->resolve(new \ReflectionProperty(Dummy::class, 'id')); // returns a collection with "int" as key and "string" as values Type
110+
111+
Advanced Usages
112+
~~~~~~~~~~~~~~~
113+
114+
The TypeInfo component provides various methods to manipulate and check types,
115+
depending on your needs.
116+
117+
Checking a **simple type**::
118+
119+
// define a simple integer type
120+
$type = Type::int();
121+
// check if the type matches a specific identifier
122+
$type->isIdentifiedBy(TypeIdentifier::INT); // true
123+
$type->isIdentifiedBy(TypeIdentifier::STRING); // false
124+
125+
// define a union type (equivalent to PHP's int|string)
126+
$type = Type::union(Type::string(), Type::int());
127+
// now the second check is true because the union type contains the string type
128+
$type->isIdentifiedBy(TypeIdentifier::INT); // true
129+
$type->isIdentifiedBy(TypeIdentifier::STRING); // true
130+
131+
class DummyParent {}
132+
class Dummy extends DummyParent implements DummyInterface {}
133+
134+
// define an object type
135+
$type = Type::object(Dummy::class);
136+
137+
// check if the type is an object or matches a specific class
138+
$type->isIdentifiedBy(TypeIdentifier::OBJECT); // true
139+
$type->isIdentifiedBy(Dummy::class); // true
140+
// check if it inherits/implements something
141+
$type->isIdentifiedBy(DummyParent::class); // true
142+
$type->isIdentifiedBy(DummyInterface::class); // true
143+
144+
Using callables for **complex checks**:
145+
146+
class Foo
147+
{
148+
private int $integer;
149+
private string $string;
150+
private ?float $float;
151+
}
152+
153+
$reflClass = new\ReflectionClass(Foo::class);
154+
155+
$resolver = TypeResolver::create();
156+
$integerType = $resolver->resolve($reflClass->getProperty('integer'));
157+
$stringType = $resolver->resolve($reflClass->getProperty('string'));
158+
$floatType = $resolver->resolve($reflClass->getProperty('float'));
159+
160+
// define a callable to validate non-nullable number types
161+
$isNonNullableNumber = function (Type $type): bool {
162+
if ($type->isNullable()) {
163+
return false;
164+
}
165+
166+
if ($type->isIdentifiedBy(TypeIdentifier::INT) || $type->isIdentifiedBy(TypeIdentifier::FLOAT)) {
167+
return true;
168+
}
169+
170+
return false;
171+
};
172+
173+
$integerType->isSatisfiedBy($isNonNullableNumber); // true
174+
$stringType->isSatisfiedBy($isNonNullableNumber); // false
175+
$floatType->isSatisfiedBy($isNonNullableNumber); // false

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp