private static function getHash($what)
    {
        $str = null;
        if (!($what instanceof \Reflector)) {
            $str = \get_class($what);
        } elseif ($what instanceof \ReflectionClass) {
            $str = $what->getName();
        } elseif ($what instanceof \ReflectionMethod) {
            $str = $what->getDeclaringClass()->getName().'::'.$what->getName().'()';
        } elseif ($what instanceof \ReflectionFunction) {
            $str = $what->getName().'()';
        } elseif ($what instanceof \ReflectionProperty) {
            $str = $what->getDeclaringClass()->getName().'::'.$what->getName();
        }
        return $str
            ? \md5($str)
            : null;
    }