1: <?php declare(strict_types=1);
2:
3: namespace Salient\Contract\Core;
4:
5: /**
6: * @api
7: *
8: * @template TClass of object
9: */
10: interface BuilderInterface extends Chainable, Immutable
11: {
12: /**
13: * Get a new builder
14: *
15: * @return static
16: */
17: public static function create();
18:
19: /**
20: * Get an instance from a possibly-terminated builder
21: *
22: * @param static|TClass $object
23: * @return TClass
24: */
25: public static function resolve($object);
26:
27: /**
28: * Terminate the builder by creating an instance
29: *
30: * @return TClass
31: */
32: public function build();
33: }
34: