object.php ➔ clone_()   C
last analyzed

Complexity

Conditions 15
Paths 2

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 15
nc 2
nop 0
dl 0
loc 28
rs 5.9166
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php namespace Tarsana\Functional;
2
/**
3
 * Useful functions to handle objects (associative arrays are considered objects).
4
 * @file
5
 */
6
7
/**
8
 * Returns a deep copy of the given value.
9
 *
10
 * `Callable`s are not copied but returned by reference.
11
 * ```php
12
 * $data = (object) [
13
 *     'content' => (object) ['name' => 'foo'],
14
 *     'other' => 'value'
15
 * ];
16
 *
17
 * $clonedData = F\clone_($data);
18
 * $clonedData->content->name = 'bar';
19
 *
20
 * $clonedData; //=> (object) ['content' => (object) ['name' => 'bar'], 'other' => 'value']
21
 * $data; //=> (object) ['content' => (object) ['name' => 'foo'], 'other' => 'value']
22
 * ```
23
 *
24
 * @signature a -> a
25
 * @param  mixed $value
0 ignored issues
show
Bug introduced by
There is no parameter named $value. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
26
 * @return mixed
27
 */
28
function clone_() {
29
    static $clone = false;
30
    $clone = $clone ?: curry(function($value) use(&$clone) {
31
        switch (type($value)) {
32
            case 'Null':
33
            case 'Boolean':
34
            case 'String':
35
            case 'Function':
36
            case 'Resource':
37
            case 'Number':
38
                return $value;
39
            case 'ArrayObject':
40
            case 'Array':
41
            case 'List':
42
                return array_map($clone, $value);
43
            case 'Error':
44
            case 'Stream':
45
            case 'Object':
46
                $result = clone $value;
47
                foreach (keys($value) as $key) {
48
                    $result->{$key} = $clone($result->{$key});
49
                }
50
                return $result;
51
        }
52
        return $value;
53
    });
54
    return _apply($clone, func_get_args());
55
}
56
57
/**
58
 * Converts an object to an associative array containing public non-static attributes.
59
 *
60
 * If `$object` is not an object, it is returned unchanged.
61
 *
62
 * ```php
63
 * class AttributesTestClass {
64
 *     private $a;
65
 *     public $b = 1;
66
 *     public $c;
67
 *     private $d;
68
 *     static $e;
69
 * }
70
 *
71
 * $test = new AttributesTestClass;
72
 * F\attributes($test); //=> ['b' => 1, 'c' => null]
73
 * ```
74
 *
75
 * @stream
76
 * @signature {k: v} -> {k: v}
77
 * @param  object|array $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
78
 * @return array
79
 */
80
function attributes() {
81
    static $attrs = false;
82
    $attrs = $attrs ?: curry(function($object) {
83
        if (is_object($object))
84
            return get_object_vars($object);
85
        return $object;
86
    });
87
    return _apply($attrs, func_get_args());
88
}
89
90
/**
91
 * Returns a list of array's keys or object's public attributes names.
92
 *
93
 * ```php
94
 * F\keys([1, 2, 3]); //=> [0, 1, 2]
95
 * F\keys(['name' => 'foo', 'age' => 11]); //=> ['name', 'age']
96
 * F\keys((object)['name' => 'foo', 'age' => 11]); //=> ['name', 'age']
97
 * ```
98
 *
99
 * @stream
100
 * @signature [*] -> [Number]
101
 * @signature {k: v} -> [k]
102
 * @param object|array $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
103
 * @return array
104
 */
105 View Code Duplication
function keys() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
106
    static $keys = false;
107
    $keys = $keys ?: curry(function($object) {
108
        return is_object($object)
109
            ? array_keys(get_object_vars($object))
110
            : array_keys($object);
111
    });
112
    return _apply($keys, func_get_args());
113
}
114
115
/**
116
 * Returns a list of array's values or object's public attributes values.
117
 *
118
 * ```php
119
 * F\values([1, 2, 3]); //=> [1, 2, 3]
120
 * F\values(['name' => 'foo', 'age' => 11]); //=> ['foo', 11]
121
 * F\values((object)['name' => 'foo', 'age' => 11]); //=> ['foo', 11]
122
 * ```
123
 *
124
 * @stream
125
 * @signature [a] -> [a]
126
 * @signature {k: v} -> [v]
127
 * @param object|array $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
128
 * @return array
129
 */
130 View Code Duplication
function values() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
131
    static $values = false;
132
    $values = $values ?: curry(function($object) {
133
        return is_object($object)
134
            ? array_values(get_object_vars($object))
135
            : array_values($object);
136
    });
137
    return _apply($values, func_get_args());
138
}
139
140
/**
141
 * Checks if the given array or object has a specific key or public attribute.
142
 *
143
 * ```php
144
 * class HasTestClass {
145
 *     public $a = 1;
146
 *     private $b = 2;
147
 *     protected $c = 3;
148
 *     public $d;
149
 * }
150
 * $array = [
151
 *     'type' => 'Array',
152
 *     'length' => 78
153
 * ];
154
 * $array[3] = 'three';
155
 * $object = (object) ['name' => 'ok'];
156
 *
157
 * $hasName = F\has('name');
158
 *
159
 * F\has('type', $array); //=> true
160
 * F\has(3, $array); //=> true
161
 * $hasName($array); //=> false
162
 * $hasName($object); //=> true
163
 * F\has('length', $object); //=> false
164
 * F\has('a', new HasTestClass); //=> true
165
 * F\has('b', new HasTestClass); //=> false
166
 * ```
167
 *
168
 * @stream
169
 * @signature k -> {k: v} -> Boolean
170
 * @param  string|int $name
0 ignored issues
show
Bug introduced by
There is no parameter named $name. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
171
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
172
 * @return bool
173
 */
174
function has() {
175
    static $has = false;
176
    $has = $has ?: curry(function($name, $object){
177
        if (is_object($object)) return isset($object->{$name});
178
        if (is_array($object)) return isset($object[$name]);
179
        return false;
180
    });
181
    return _apply($has, func_get_args());
182
}
183
184
/**
185
 * Gets the value of a key from an array or the
186
 * value of an public attribute from an object.
187
 *
188
 * If the key/attribute is missing, `null` is returned.
189
 * ```php
190
 * $data = [
191
 *     ['name' => 'foo', 'type' => 'test'],
192
 *     ['name' => 'bar', 'type' => 'test'],
193
 *     (object) ['name' => 'baz'],
194
 *     [1, 2, 3]
195
 * ];
196
 * $nameOf = F\get('name');
197
 * F\get(0, $data); //=> ['name' => 'foo', 'type' => 'test']
198
 * $nameOf($data[1]); //=> 'bar'
199
 * $nameOf($data[2]); //=> 'baz'
200
 * $nameOf($data[3]); //=> null
201
 * ```
202
 *
203
 * @stream
204
 * @signature k -> {k: v} -> Maybe(v)
205
 * @param  string $name
0 ignored issues
show
Bug introduced by
There is no parameter named $name. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
206
 * @param  array $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
207
 * @return mixed
208
 */
209
function get() {
210
    static $get = false;
211
    $get = $get ?: curry(function($name, $object){
212
        return is_object($object)
213
            ? (isset($object->{$name}) ? $object->{$name} : null)
214
            : (isset($object[$name]) ? $object[$name] : null);
215
    });
216
    return _apply($get, func_get_args());
217
}
218
219
/**
220
 * Gets a value from an array/object using a path of keys/attributes.
221
 *
222
 * ```php
223
 * $data = [
224
 *     ['name' => 'foo', 'type' => 'test'],
225
 *     ['name' => 'bar', 'type' => 'test'],
226
 *     (object) ['name' => 'baz', 'scores' => [1, 2, 3]]
227
 * ];
228
 * $nameOfFirst = F\getPath([0, 'name']);
229
 * $nameOfFirst($data); //=> 'foo'
230
 * F\getPath([2, 'scores', 1], $data); //=> 2
231
 * F\getPath([2, 'foo', 1], $data); //=> null
232
 * ```
233
 *
234
 * @stream
235
 * @signature [k] -> {k: v} -> v
236
 * @param  array $path
0 ignored issues
show
Bug introduced by
There is no parameter named $path. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
237
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
238
 * @return mixed
239
 */
240 View Code Duplication
function getPath() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
241
    static $getPath = false;
242
    $getPath = $getPath ?: curry(function($path, $object) {
243
        $result = $object;
244
        foreach ($path as &$attr) {
245
            $result = get($attr, $result);
246
        }
247
        return $result;
248
    });
249
    return _apply($getPath, func_get_args());
250
}
251
252
/**
253
 * Returns a new array or object with the value of a key or a public attribute set
254
 * to a specific value.
255
 *
256
 * if the key/attribute is missing and `$object` is an `array`
257
 * or `stdClass`; the key/attribute is added. Otherwise `null` is returned.
258
 * ```php
259
 * $task = ['name' => 'test', 'complete' => false];
260
 * $done = F\set('complete', true);
261
 * $done($task); //=> ['name' => 'test', 'complete' => true]
262
 * $done((object) $task); //=> (object) ['name' => 'test', 'complete' => true]
263
 * F\set('description', 'Some text here', $task); //=> ['name' => 'test', 'complete' => false, 'description' => 'Some text here']
264
 * ```
265
 *
266
 * @stream
267
 * @signature k -> v -> {k: v} -> {k: v}
268
 * @param  string|int $name
0 ignored issues
show
Bug introduced by
There is no parameter named $name. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
269
 * @param  mixed $value
0 ignored issues
show
Bug introduced by
There is no parameter named $value. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
270
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
271
 * @return mixed
272
 */
273
function set() {
274
    static $set = false;
275
    $set = $set ?: curry(function($name, $value, $object) {
276
        if (is_object($object)) {
277
            $object = clone_($object);
278
            $object->{$name} = $value;
279
        } else
280
            $object[$name] = $value;
281
        return $object;
282
    });
283
    return _apply($set, func_get_args());
284
}
285
286
/**
287
 * Updates the value of a key or public attribute using a callable.
288
 *
289
 * ```php
290
 * $person = [
291
 *     'name' => 'foo',
292
 *     'age' => 11
293
 * ];
294
 * $growUp = F\update('age', F\plus(1));
295
 * $growUp($person); //=> ['name' => 'foo', 'age' => 12]
296
 * // updating a missing attribute has no effect
297
 * F\update('wow', F\plus(1), $person); //=> ['name' => 'foo', 'age' => 11]
298
 * ```
299
 *
300
 * @stream
301
 * @signature k -> (v -> v) -> {k: v} -> {k: v}
302
 * @param  string|int $name
0 ignored issues
show
Bug introduced by
There is no parameter named $name. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
303
 * @param  callable $fn
0 ignored issues
show
Bug introduced by
There is no parameter named $fn. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
304
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
305
 * @return mixed
306
 */
307 View Code Duplication
function update() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
308
    static $update = false;
309
    $update = $update ?: curry(function($name, $fn, $object) {
310
        $value = get($name, $object);
311
        return (null === $value) ? $object : set($name, $fn($value), $object);
0 ignored issues
show
Unused Code introduced by
The call to set() has too many arguments starting with $fn($value).

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
312
    });
313
    return _apply($update, func_get_args());
314
}
315
316
/**
317
 * Checks if an attribute/value of an object/array passes the given predicate.
318
 *
319
 * ```php
320
 * $foo = ['name' => 'foo', 'age' => 11];
321
 * $isAdult = F\satisfies(F\lte(18), 'age');
322
 * F\satisfies(F\startsWith('f'), 'name', $foo); //=> true
323
 * F\satisfies(F\startsWith('g'), 'name', $foo); //=> false
324
 * F\satisfies(F\startsWith('g'), 'friends', $foo); //=> false
325
 * $isAdult($foo); //=> false
326
 * ```
327
 *
328
 * @stream
329
 * @signature (a -> Boolean) -> k -> {k : a} -> Boolean
330
 * @param  callable $predicate
0 ignored issues
show
Bug introduced by
There is no parameter named $predicate. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
331
 * @param  string|int $key
0 ignored issues
show
Bug introduced by
There is no parameter named $key. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
332
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
333
 * @return bool
334
 */
335
function satisfies() {
336
    static $satisfies = false;
337
    $satisfies = $satisfies ?: curry(function($predicate, $key, $object) {
338
        return has($key, $object) && $predicate(get($key, $object));
339
    });
340
    return _apply($satisfies, func_get_args());
341
}
342
343
/**
344
 * Checks if a list of attribute/value of an object/array passes all the given predicates.
345
 *
346
 * ```php
347
 * $persons = [
348
 *     ['name' => 'foo', 'age' => 11],
349
 *     ['name' => 'bar', 'age' => 9],
350
 *     ['name' => 'baz', 'age' => 16],
351
 *     ['name' => 'zeta', 'age' => 33],
352
 *     ['name' => 'beta', 'age' => 25]
353
 * ];
354
 *
355
 * $isValid = F\satisfiesAll([
356
 *     'name' => F\startsWith('b'),
357
 *     'age' => F\lte(15)
358
 * ]);
359
 *
360
 * F\filter($isValid, $persons); //=> [['name' => 'baz', 'age' => 16], ['name' => 'beta', 'age' => 25]]
361
 * ```
362
 *
363
 * @stream
364
 * @signature {String: (a -> Boolean)} -> {k : a} -> Boolean
365
 * @param  array $predicates
0 ignored issues
show
Bug introduced by
There is no parameter named $predicates. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
366
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
367
 * @return bool
368
 */
369 View Code Duplication
function satisfiesAll() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
370
    static $satisfiesAll = false;
371
    $satisfiesAll = $satisfiesAll ?: curry(function($predicates, $object) {
372
        foreach ($predicates as $key => $predicate) {
373
            if (!satisfies($predicate, $key, $object))
374
                return false;
375
        }
376
        return true;
377
    });
378
    return _apply($satisfiesAll, func_get_args());
379
}
380
381
/**
382
 * Checks if a list of attribute/value of an object/array passes any of the given predicates.
383
 *
384
 * ```php
385
 * $persons = [
386
 *     ['name' => 'foo', 'age' => 11],
387
 *     ['name' => 'bar', 'age' => 9],
388
 *     ['name' => 'baz', 'age' => 16],
389
 *     ['name' => 'zeta', 'age' => 33],
390
 *     ['name' => 'beta', 'age' => 25]
391
 * ];
392
 *
393
 * $isValid = F\satisfiesAny([
394
 *     'name' => F\startsWith('b'),
395
 *     'age' => F\lte(15)
396
 * ]);
397
 *
398
 * F\filter($isValid, $persons); //=> [['name' => 'bar', 'age' => 9], ['name' => 'baz', 'age' => 16], ['name' => 'zeta', 'age' => 33], ['name' => 'beta', 'age' => 25]]
399
 * ```
400
 *
401
 * @stream
402
 * @signature {String: (a -> Boolean)} -> {k : a} -> Boolean
403
 * @param  array $predicates
0 ignored issues
show
Bug introduced by
There is no parameter named $predicates. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
404
 * @param  mixed $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
405
 * @return bool
406
 */
407 View Code Duplication
function satisfiesAny() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
408
    static $satisfiesAny = false;
409
    $satisfiesAny = $satisfiesAny ?: curry(function($predicates, $object) {
410
        foreach ($predicates as $key => $predicate) {
411
            if (satisfies($predicate, $key, $object))
412
                return true;
413
        }
414
        return false;
415
    });
416
    return _apply($satisfiesAny, func_get_args());
417
}
418
419
/**
420
 * Converts an object or associative array to an array of [key, value] pairs.
421
 *
422
 * ```php
423
 * $list = ['key' => 'value', 'number' => 53, 'foo', 'bar'];
424
 * F\toPairs($list); //=> [['key', 'value'], ['number', 53], [0, 'foo'], [1, 'bar']]
425
 * ```
426
 *
427
 * @stream
428
 * @signature {k: v} -> [(k,v)]
429
 * @signature [v] -> [(Number,v)]
430
 * @param  array $object
0 ignored issues
show
Bug introduced by
There is no parameter named $object. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
431
 * @return array
432
 */
433
function toPairs() {
434
    static $toPairs = false;
435
    $toPairs = $toPairs ?: curry(function($object) {
436
        if (is_object($object))
437
            $object = get_object_vars($object);
438
        $result = [];
439
        foreach ($object as $key => $value) {
440
            $result[] = [$key, $value];
441
        }
442
        return $result;
443
    });
444
    return _apply($toPairs, func_get_args());
445
}
446