Monad   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 60
rs 10
c 0
b 0
f 0
wmc 5
lcom 1
cbo 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 4 1
A __construct() 0 4 1
A of() 0 4 1
A map() 0 6 1
A value() 0 4 1
1
<?php
2
3
namespace DaveRoss\FunctionalProgrammingUtils;
4
5
/**
6
 * Class Monad
7
 * Base class for Monads. Implements basic Monad functionality
8
 * @package DaveRoss\FunctionalProgrammingUtils
9
 */
10
abstract class Monad
0 ignored issues
show
Coding Style introduced by
Monad does not seem to conform to the naming convention (^Abstract|Factory$).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
11
{
12
13
    protected $value;
14
15
    /**
16
     * Allow Monad::map() to be called like a method
17
     *
18
     * @param callable $f
19
     *
20
     * @return mixed
0 ignored issues
show
Documentation introduced by
Consider making the return type a bit more specific; maybe use Monad.

This check looks for the generic type array as a return type and suggests a more specific type. This type is inferred from the actual code.

Loading history...
21
     */
22
    public function __invoke($f)
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $f. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
23
    {
24
        return $this->map($f);
25
    }
26
27
    /**
28
     * @param mixed $a
29
     */
30
    private function __construct($a)
0 ignored issues
show
introduced by
Something seems to be off here. Are you sure you want to declare the constructor as private, and the class as abstract?
Loading history...
Comprehensibility introduced by
Avoid variables with short names like $a. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
31
    {
32
        $this->value = $a;
33
    }
34
35
    /**
36
     * Instantiate a new Monad wrapping a given value
37
     *
38
     * @param mixed $a
39
     *
40
     * @return Monad
41
     */
42
    public static function of($a)
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $a. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
Coding Style introduced by
This method's name is shorter than the configured minimum length of 3 characters.

Even though PHP does not care about the name of your methods, it is generally a good practice to choose method names which can be easily understood by other human readers.

Loading history...
43
    {
44
        return new static( $a );
45
    }
46
47
    /**
48
     * Apply a function to this Monad's value
49
     *
50
     * @param callable $f
51
     *
52
     * @return Monad
53
     */
54
    public function map(callable $f)
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $f. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
55
    {
56
        $class_name = get_called_class();
0 ignored issues
show
Coding Style introduced by
$class_name does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
57
58
        return new $class_name( $f( $this->value ) );
0 ignored issues
show
Coding Style introduced by
$class_name does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
59
    }
60
61
    /**
62
     * Get this Monad's value without wrapping it.
63
     * @return mixed
64
     */
65
    public function value()
66
    {
67
        return $this->value;
68
    }
69
}