英文:
Describe an array containing an object (stdClass) with @phpstan-return in PHP DocBlock? - PHPStan
问题
/**
* @phpstan-return array{
* id: int,
* title: string,
* authors: stdClass{
* firstName: string,
* lastName: string,
* },
* }
*/
英文:
I have an example function in PHP (8.2) that returns an array
. Inside this array
there is also an object
, more precisely stdClass
.
I use PHPStan as a static analyzer tool. How can I specify this (object shapes) structure syntactically correct to use it in @phpstan-return
using PHPStan Array shapes ?
The example function getBooks()
:
function getBook(): array
{
$author = new stdClass();
$author->firstName = 'John';
$author->lastName = 'Doe';
return [
'id' => 12345,
'title' => 'Whoever may help me deserves a big "Thank You!"',
'authors' => $author,
];
}
What I already tried and is an invalid syntax:
/**
* @phpstan-return array{
* id: int,
* title: string,
* authors: object{
* firstName: string,
* lastName: string,
* },
* }
*/
What I definitely already know is, that the object { .. }
part is the syntactically incorrect one here.
答案1
得分: 2
截至 PHPStan 1.10.12
,现在可以实现以下功能:
https://phpstan.org/writing-php-code/phpdoc-types#object-shapes
所以,对于你的情况,可以这样编写:
/**
* @return object{
* id: int,
* title: string,
* authors: object{
* firstName: string,
* lastName: string,
* },
* }
*/
英文:
As of PHPStan 1.10.12
this is now possible:
https://phpstan.org/writing-php-code/phpdoc-types#object-shapes
So, for your case, that would be written:
/**
* @return object{
* id: int,
* title: string,
* authors: object{
* firstName: string,
* lastName: string,
* },
* }
*/
答案2
得分: 0
/** @return array<string, int|stdClass|string> */
function getBook(): array
{ ... }
/** @return array<mixed> */
function getBook(): array
{ ... }
英文:
You can define the associative array architecture with the array<keyType, valType|valType|...>
pattern:
/** @return array<string, int|stdClass|string> */
function getBook(): array
{ ... }
<kbd><strong>PHPStan demo</strong></kbd>
or specify that it is a mixed array:
/** @return array<mixed> */
function getBook(): array
{ ... }
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论