Uuid   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 3
c 2
b 1
f 0
lcom 1
cbo 1
dl 0
loc 61
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 13 1
A getInstance() 0 8 2
1
<?php
2
/**
3
 * Phossa Project
4
 *
5
 * PHP version 5.4
6
 *
7
 * @category  Library
8
 * @package   Phossa2\Uuid
9
 * @copyright Copyright (c) 2016 phossa.com
10
 * @license   http://mit-license.org/ MIT License
11
 * @link      http://www.phossa.com/
12
 */
13
/*# declare(strict_types=1); */
14
15
namespace Phossa2\Uuid;
16
17
use Phossa2\Uuid\Traits\UtilityTrait;
18
use Phossa2\Uuid\Interfaces\UuidInterface;
19
use Phossa2\Uuid\Interfaces\UtilityInterface;
20
21
/**
22
 * Uuid
23
 *
24
 * @package Phossa2\Uuid
25
 * @author  Hong Zhang <[email protected]>
26
 * @version 2.1.0
27
 * @since   2.0.0 added
28
 * @since   2.1.0 moved sequence related stuff to SequenceTrait
29
 */
30
class Uuid implements UuidInterface, UtilityInterface
31
{
32
    use UtilityTrait;
33
34
    /**
35
     * Default vendor code
36
     *
37
     * @var    string
38
     * @access protected
39
     */
40
    protected $vendor = '0001';
41
42
    /**
43
     * remaining part
44
     *
45
     * @var    string
46
     * @access protected
47
     */
48
    protected $remain = '0000';
49
50
    /**
51
     * Instances
52
     *
53
     * @var    UuidInterface[]
54
     * @access private
55
     */
56
    private static $instances = [];
57
58
    /**
59
     * {@inheritDoc}
60
     */
61
    public static function get(
62
        /*# string */ $dataType = self::TYPE_OID,
63
        /*# string */ $shardId = '0001'
64
    )/*# : string */ {
65
        $obj = static::getInstance();
66
        return
67
            substr(self::VERSION, 0, 1) .   // 0
68
            $dataType .                     // 1 - 4
69
            $obj->getTimestamp() .          // 5 - 19
70
            $shardId .                      // 20 - 23
71
            $obj->vendor .                  // 24 - 27
0 ignored issues
show
Bug introduced by
Accessing vendor on the interface Phossa2\Uuid\Interfaces\UuidInterface suggest that you code against a concrete implementation. How about adding an instanceof check?

If you access a property on an interface, you most likely code against a concrete implementation of the interface.

Available Fixes

  1. Adding an additional type check:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeInterface $object) {
        if ($object instanceof SomeClass) {
            $a = $object->a;
        }
    }
    
  2. Changing the type hint:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeClass $object) {
        $a = $object->a;
    }
    
Loading history...
72
            $obj->remain;                   // 28 - 31
0 ignored issues
show
Bug introduced by
Accessing remain on the interface Phossa2\Uuid\Interfaces\UuidInterface suggest that you code against a concrete implementation. How about adding an instanceof check?

If you access a property on an interface, you most likely code against a concrete implementation of the interface.

Available Fixes

  1. Adding an additional type check:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeInterface $object) {
        if ($object instanceof SomeClass) {
            $a = $object->a;
        }
    }
    
  2. Changing the type hint:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeClass $object) {
        $a = $object->a;
    }
    
Loading history...
73
    }
74
75
    /**
76
     * Get instance
77
     *
78
     * return  Uuid
79
     * @access protected
80
     * @static
81
     */
82
    protected static function getInstance()
83
    {
84
        $class = get_called_class();
85
        if (!isset(self::$instances[$class])) {
86
            self::$instances[$class] = new static();
87
        }
88
        return self::$instances[$class];
89
    }
90
}
91