/var/www/html_us/wp-content/plugins/wp-smtp/vendor/lucatume/di52/src/Builders/CallableBuilder.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
/**
 * Callable-based builder.
 *
 * @package lucatume\DI52\Builders
 */

namespace lucatume\DI52\Builders;

use 
lucatume\DI52\Container;

/**
 * Class CallableBuilder
 *
 * @package lucatume\DI52\Builders
 */
class CallableBuilder implements BuilderInterfaceReinitializableBuilderInterface
{
    
/**
     * An instance of the DI Container.
     *
     * @var Container The
     */
    
protected $container;

    
/**
     * The callable this builder will use.
     *
     * @var callable
     */
    
protected $callable;
    
/**
     * An array of method that will be called on the built object.
     *
     * @var array<string>|null
     */
    
protected $afterBuildMethods;
    
/**
     * An array of arguments that will be passed as input to the callable method.
     *
     * @var array<mixed>
     */
    
protected $buildArgs;

    
/**
     * CallableBuilder constructor.
     *
     * @param Container          $container         An instance of the DI Container.
     * @param callable           $callable          The builder callable.
     * @param array<string>|null $afterBuildMethods A set of methods to call on the built instance.
     * @param mixed              ...$buildArgs      A set of optional arguments for the callable method.
     */
    
public function __construct(
        
Container $container,
        callable 
$callable,
        array 
$afterBuildMethods null,
        ...
$buildArgs
    
) {
        
$this->container $container;
        
$this->callable $callable;
        
$this->afterBuildMethods $afterBuildMethods ?: [];
        
$this->buildArgs $buildArgs;
    }

    
/**
     * Calls the callable for the builder and returns its value.
     *
     * @return mixed The built implementation.
     */
    
public function build()
    {
        
$built call_user_func($this->callable, ...$this->buildArgs);

        foreach ((array)
$this->afterBuildMethods as $afterBuildMethod) {
            
$built->{$afterBuildMethod}();
        }

        return 
$built;
    }

    
/**
     * Reinitialize the builder setting the after build methods and build args.
     *
     * @param array<string>|null $afterBuildMethods A set of methods to call on the object after it's built.
     * @param mixed              ...$buildArgs      A set of build arguments that will be passed to the constructor.
     *
     * @return void This method does not return any value.
     */
    
public function reinit(array $afterBuildMethods null, ...$buildArgs)
    {
        
$this->afterBuildMethods $afterBuildMethods ?: [];
        
$this->buildArgs $buildArgs;
    }
}