/var/www/html/wp-content/plugins/woocommerce/lib/packages/League/Container/Inflector/Inflector.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php declare(strict_types=1);

namespace 
Automattic\WooCommerce\Vendor\League\Container\Inflector;

use 
Automattic\WooCommerce\Vendor\League\Container\Argument\ArgumentResolverInterface;
use 
Automattic\WooCommerce\Vendor\League\Container\Argument\ArgumentResolverTrait;
use 
Automattic\WooCommerce\Vendor\League\Container\ContainerAwareTrait;

class 
Inflector implements ArgumentResolverInterfaceInflectorInterface
{
    use 
ArgumentResolverTrait;
    use 
ContainerAwareTrait;

    
/**
     * @var string
     */
    
protected $type;

    
/**
     * @var callable|null
     */
    
protected $callback;

    
/**
     * @var array
     */
    
protected $methods = [];

    
/**
     * @var array
     */
    
protected $properties = [];

    
/**
     * Construct.
     *
     * @param string        $type
     * @param callable|null $callback
     */
    
public function __construct(string $type, ?callable $callback null)
    {
        
$this->type     $type;
        
$this->callback $callback;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getType() : string
    
{
        return 
$this->type;
    }

    
/**
     * {@inheritdoc}
     */
    
public function invokeMethod(string $name, array $args) : InflectorInterface
    
{
        
$this->methods[$name] = $args;

        return 
$this;
    }

    
/**
     * {@inheritdoc}
     */
    
public function invokeMethods(array $methods) : InflectorInterface
    
{
        foreach (
$methods as $name => $args) {
            
$this->invokeMethod($name$args);
        }

        return 
$this;
    }

    
/**
     * {@inheritdoc}
     */
    
public function setProperty(string $property$value) : InflectorInterface
    
{
        
$this->properties[$property] = $this->resolveArguments([$value])[0];

        return 
$this;
    }

    
/**
     * {@inheritdoc}
     */
    
public function setProperties(array $properties) : InflectorInterface
    
{
        foreach (
$properties as $property => $value) {
            
$this->setProperty($property$value);
        }

        return 
$this;
    }

    
/**
     * {@inheritdoc}
     */
    
public function inflect($object)
    {
        
$properties $this->resolveArguments(array_values($this->properties));
        
$properties array_combine(array_keys($this->properties), $properties);

        
// array_combine() can technically return false
        
foreach ($properties ?: [] as $property => $value) {
            
$object->{$property} = $value;
        }

        foreach (
$this->methods as $method => $args) {
            
$args $this->resolveArguments($args);

            
/** @var callable $callable */
            
$callable = [$object$method];
            
call_user_func_array($callable$args);
        }

        if (
$this->callback !== null) {
            
call_user_func($this->callback$object);
        }
    }
}