Skip to content

Instantly share code, notes, and snippets.

@azjezz
Last active December 12, 2022 15:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azjezz/60797bb5538e5e1f16d0473407d80eec to your computer and use it in GitHub Desktop.
Save azjezz/60797bb5538e5e1f16d0473407d80eec to your computer and use it in GitHub Desktop.
<?php
declare(strict_types=1);
namespace App;
enum ArticleStatus {
case Published;
case Draft;
case Archived;
case Deleted;
case Scheduled;
}
#[Entity('article_authors')]
final class ArticleAuthor {
public function __construct(
public readonly string $name,
public readonly string $email,
) {}
}
#[Entity('articles')]
final class Article {
public function __construct(
public readonly string $uuid,
public readonly string $title,
public readonly string $content,
public readonly ArticleAuthor $author,
public readonly ArticleStatus $status,
) {}
}
[
{
"type": "declare",
"value": {
"span": [
3,
1
],
"entries": {
"start": [
3,
8
],
"end": [
3,
23
],
"entries": [
{
"key": {
"span": [
3,
9
],
"value": "strict_types"
},
"span": [
3,
21
],
"value": {
"type": "literal_integer",
"value": {
"span": [
3,
22
],
"value": "1"
}
}
}
]
},
"body": {
"noop": {
"span": [
3,
24
]
}
}
}
},
{
"type": "namespace",
"value": {
"type": "unbraced",
"value": {
"start": [
5,
1
],
"end": [
5,
14
],
"name": {
"span": [
5,
11
],
"value": "App"
},
"statements": [
{
"type": "unit_enum",
"value": {
"span": [
7,
1
],
"name": {
"span": [
7,
6
],
"value": "ArticleStatus"
},
"attributes": [],
"implements": [],
"body": {
"start": [
7,
20
],
"end": [
13,
1
],
"members": [
{
"type": "case",
"value": {
"start": [
8,
5
],
"end": [
8,
19
],
"attributes": [],
"name": {
"span": [
8,
10
],
"value": "Published"
}
}
},
{
"type": "case",
"value": {
"start": [
9,
5
],
"end": [
9,
15
],
"attributes": [],
"name": {
"span": [
9,
10
],
"value": "Draft"
}
}
},
{
"type": "case",
"value": {
"start": [
10,
5
],
"end": [
10,
18
],
"attributes": [],
"name": {
"span": [
10,
10
],
"value": "Archived"
}
}
},
{
"type": "case",
"value": {
"start": [
11,
5
],
"end": [
11,
17
],
"attributes": [],
"name": {
"span": [
11,
10
],
"value": "Deleted"
}
}
},
{
"type": "case",
"value": {
"start": [
12,
5
],
"end": [
12,
19
],
"attributes": [],
"name": {
"span": [
12,
10
],
"value": "Scheduled"
}
}
}
]
}
}
},
{
"type": "class",
"value": {
"span": [
16,
7
],
"name": {
"span": [
16,
13
],
"value": "ArticleAuthor"
},
"modifiers": [
{
"type": "final",
"value": {
"start": [
16,
1
],
"end": [
16,
7
]
}
}
],
"extends": null,
"implements": null,
"attributes": [
{
"start": [
15,
1
],
"end": [
15,
28
],
"members": [
{
"start": [
15,
3
],
"end": [
15,
28
],
"expression": {
"type": "call",
"value": {
"target": {
"type": "identifier",
"value": {
"type": "simple_identifier",
"value": {
"span": [
15,
3
],
"value": "Entity"
}
}
},
"args": [
{
"name": null,
"value": {
"type": "literal_string",
"value": {
"span": [
15,
10
],
"value": "article_authors"
}
},
"unpack": false
}
]
}
}
}
]
}
],
"body": {
"start": [
16,
27
],
"end": [
21,
1
],
"members": [
{
"type": "method",
"value": {
"start": [
17,
12
],
"end": [
20,
8
],
"name": {
"span": [
17,
21
],
"value": "__construct"
},
"attributes": [],
"parameters": {
"start": [
17,
32
],
"end": [
20,
7
],
"members": [
{
"start": [
18,
9
],
"end": [
18,
37
],
"name": {
"span": [
18,
32
],
"name": "name"
},
"attributes": [],
"type": {
"type": "string"
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
18,
9
],
"end": [
18,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
18,
16
],
"end": [
18,
25
]
}
}
],
"by_ref": false
},
{
"start": [
19,
9
],
"end": [
19,
38
],
"name": {
"span": [
19,
32
],
"name": "email"
},
"attributes": [],
"type": {
"type": "string"
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
19,
9
],
"end": [
19,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
19,
16
],
"end": [
19,
25
]
}
}
],
"by_ref": false
}
]
},
"body": [],
"modifiers": [
{
"type": "public",
"value": {
"start": [
17,
5
],
"end": [
17,
12
]
}
}
],
"return_type": null,
"by_ref": false
}
}
]
}
}
},
{
"type": "class",
"value": {
"span": [
24,
7
],
"name": {
"span": [
24,
13
],
"value": "Article"
},
"modifiers": [
{
"type": "final",
"value": {
"start": [
24,
1
],
"end": [
24,
7
]
}
}
],
"extends": null,
"implements": null,
"attributes": [
{
"start": [
23,
1
],
"end": [
23,
21
],
"members": [
{
"start": [
23,
3
],
"end": [
23,
21
],
"expression": {
"type": "call",
"value": {
"target": {
"type": "identifier",
"value": {
"type": "simple_identifier",
"value": {
"span": [
23,
3
],
"value": "Entity"
}
}
},
"args": [
{
"name": null,
"value": {
"type": "literal_string",
"value": {
"span": [
23,
10
],
"value": "articles"
}
},
"unpack": false
}
]
}
}
}
]
}
],
"body": {
"start": [
24,
21
],
"end": [
32,
1
],
"members": [
{
"type": "method",
"value": {
"start": [
25,
12
],
"end": [
31,
8
],
"name": {
"span": [
25,
21
],
"value": "__construct"
},
"attributes": [],
"parameters": {
"start": [
25,
32
],
"end": [
31,
7
],
"members": [
{
"start": [
26,
9
],
"end": [
26,
37
],
"name": {
"span": [
26,
32
],
"name": "uuid"
},
"attributes": [],
"type": {
"type": "string"
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
26,
9
],
"end": [
26,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
26,
16
],
"end": [
26,
25
]
}
}
],
"by_ref": false
},
{
"start": [
27,
9
],
"end": [
27,
38
],
"name": {
"span": [
27,
32
],
"name": "title"
},
"attributes": [],
"type": {
"type": "string"
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
27,
9
],
"end": [
27,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
27,
16
],
"end": [
27,
25
]
}
}
],
"by_ref": false
},
{
"start": [
28,
9
],
"end": [
28,
40
],
"name": {
"span": [
28,
32
],
"name": "content"
},
"attributes": [],
"type": {
"type": "string"
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
28,
9
],
"end": [
28,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
28,
16
],
"end": [
28,
25
]
}
}
],
"by_ref": false
},
{
"start": [
29,
9
],
"end": [
29,
46
],
"name": {
"span": [
29,
39
],
"name": "author"
},
"attributes": [],
"type": {
"type": "identifier",
"value": {
"span": [
29,
25
],
"value": "ArticleAuthor"
}
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
29,
9
],
"end": [
29,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
29,
16
],
"end": [
29,
25
]
}
}
],
"by_ref": false
},
{
"start": [
30,
9
],
"end": [
30,
46
],
"name": {
"span": [
30,
39
],
"name": "status"
},
"attributes": [],
"type": {
"type": "identifier",
"value": {
"span": [
30,
25
],
"value": "ArticleStatus"
}
},
"variadic": false,
"default": null,
"modifiers": [
{
"type": "public",
"value": {
"start": [
30,
9
],
"end": [
30,
16
]
}
},
{
"type": "readonly",
"value": {
"start": [
30,
16
],
"end": [
30,
25
]
}
}
],
"by_ref": false
}
]
},
"body": [],
"modifiers": [
{
"type": "public",
"value": {
"start": [
25,
5
],
"end": [
25,
12
]
}
}
],
"return_type": null,
"by_ref": false
}
}
]
}
}
}
]
}
}
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment