Completed
Push — master ( 4ec893...06c363 )
by Hong
02:48
created

ClassNameTrait::getRealClassName()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 3
eloc 6
nc 3
nop 1
1
<?php
2
/**
3
 * Phossa Project
4
 *
5
 * PHP version 5.4
6
 *
7
 * @category  Library
8
 * @package   Phossa2\Shared
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\Shared\Base;
16
17
use Phossa2\Shared\Message\Message;
18
19
/**
20
 * ClassNameTrait
21
 *
22
 * - Implementation of ClassNameInterface.
23
 * - Provides PHP 5.5 ::class feature for classes using this trait
24
 * - methods are final to prevent accidental overriden in child class
25
 *
26
 * @package Phossa2\Shared
27
 * @author  Hong Zhang <[email protected]>
28
 * @version 2.0.0
29
 * @since   2.0.0 added
30
 * @since   2.0.24 added setProperties()
31
 * @since   2.0.29 modified getShortName(), getNamespace() parameters
32
 */
33
trait ClassNameTrait
34
{
35
    /**
36
     * Returns fully qualified class name
37
     *
38
     * @return string
39
     * @access public
40
     * @final
41
     * @api
42
     */
43
    final public static function getClassName()/*# : string */
44
    {
45
        return get_called_class();
46
    }
47
48
    /**
49
     * Returns class name without namespace
50
     *
51
     * @param  string|object $className optional classname
52
     * @return string
53
     * @access public
54
     * @since  2.0.29 add $className parameter
55
     * @final
56
     * @api
57
     */
58
    final public static function getShortName(
59
        $className = ''
60
    )/*# : string */ {
61
        return substr(strrchr(static::getRealClassName($className), '\\'), 1);
62
    }
63
64
    /**
65
     * Returns namespace of current class
66
     *
67
     * @param  string|object $className optional classname
68
     * @return string
69
     * @access public
70
     * @since  2.0.29 add $className parameter
71
     * @final
72
     * @api
73
     */
74
    final public static function getNameSpace(
75
        /*# string */ $className = ''
76
    )/*# : string */ {
77
        $class = static::getRealClassName($className);
78
        return substr($class, 0, strrpos($class, '\\'));
79
    }
80
81
    /**
82
     * Set object properties
83
     *
84
     * @param  array $properties
85
     * @access public
86
     * @since  2.0.24 added
87
     * @api
88
     */
89
    final public function setProperties(array $properties = [])
90
    {
91
        foreach ($properties as $name => $value) {
92
            if (property_exists($this, $name)) {
93
                $this->$name = $value;
94
            } else {
95
                trigger_error(
96
                    Message::get(
97
                        Message::MSG_PROPERTY_UNKNOWN,
98
                        $name,
99
                        get_class($this)
100
                    ),
101
                    E_USER_WARNING
102
                );
103
            }
104
        }
105
    }
106
107
    /**
108
     * Get the classname
109
     *
110
     * @param  string|object $className
111
     * @return string the class name
112
     * @access protected
113
     */
114
    protected static function getRealClassName($className)/*# : string */
115
    {
116
        if (is_object($className)) {
117
            $class = get_class($className);
118
        } else {
119
            $class = $className ?: get_called_class();
120
        }
121
        return $class;
122
    }
123
}
124