Вход Регистрация
Файл: vendor/whichbrowser/parser/src/Model/Version.php
Строк: 182
<?php

namespace WhichBrowserModel;

use 
WhichBrowserModelPrimitiveBase;

class 
Version extends Base
{
    
/** @var string|null */
    
public $value null;

    
/** @var boolean */
    
public $hidden false;

    
/** @var string */
    
public $nickname;

    
/** @var string */
    
public $alias;

    
/** @var int */
    
public $details;

    
/** @var boolean */
    
public $builds;



    
/**
     * Determine if the version is lower, equal or higher than the specified value
     *
     * @param  string   The operator, must be <, <=, =, >= or >
     * @param  mixed    The value, can be an integer, float or string with a version number
     *
     * @return boolean
     */

    
public function is()
    {
        
$valid false;

        
$arguments func_get_args();
        if (
count($arguments)) {
            
$operator '=';
            
$compare null;

            if (
count($arguments) == 1) {
                
$compare $arguments[0];
            }

            if (
count($arguments) >= 2) {
                
$operator $arguments[0];
                
$compare $arguments[1];
            }

            if (!
is_null($compare)) {
                
$min min(substr_count($this->value'.'), substr_count($compare'.')) + 1;

                
$v1 $this->toValue($this->value$min);
                
$v2 $this->toValue($compare$min);

                switch (
$operator) {
                    case 
'<':
                        
$valid $v1 $v2;
                        break;
                    case 
'<=':
                        
$valid $v1 <= $v2;
                        break;
                    case 
'=':
                        
$valid $v1 == $v2;
                        break;
                    case 
'>':
                        
$valid $v1 $v2;
                        break;
                    case 
'>=':
                        
$valid $v1 >= $v2;
                        break;
                }
            }
        }

        return 
$valid;
    }


    
/**
     * Return an object with each part of the version number
     *
     * @return object
     */

    
public function getParts()
    {
        
$parts = !is_null($this->value) ? explode('.'$this->value) : [];

        return (object) [
            
'major' => !empty($parts[0]) ? intval($parts[0]) : 0,
            
'minor' => !empty($parts[1]) ? intval($parts[1]) : 0,
            
'patch' => !empty($parts[2]) ? intval($parts[2]) : 0,
        ];
    }


    
/**
     * Return the major version as an integer
     *
     * @return integer
     */

    
public function getMajor()
    {
        return 
$this->getParts()->major;
    }


    
/**
     * Return the minor version as an integer
     *
     * @return integer
     */

    
public function getMinor()
    {
        return 
$this->getParts()->minor;
    }


    
/**
     * Return the patch number as an integer
     *
     * @return integer
     */

    
public function getPatch()
    {
        return 
$this->getParts()->patch;
    }


    
/**
     * Convert a version string seperated by dots into a float that can be compared
     *
     * @internal
     *
     * @param  string   Version string, with elements seperated by a dot
     * @param  int      The maximum precision
     *
     * @return float
     */

    
private function toValue($value null$count null)
    {
        if (
is_null($value)) {
            
$value $this->value;
        }

        
$parts explode('.'$value);
        if (!
is_null($count)) {
            
$parts array_slice($parts0$count);
        }

        
$result $parts[0];

        if (
count($parts) > 1) {
            
$result .= '.';

            
$count count($parts);
            for (
$p 1$p $count$p++) {
                
$result .= substr('0000' $parts[$p], -4);
            }
        }

        return 
floatval($result);
    }


    
/**
     * Return the version as a float
     *
     * @return float
     */

    
public function toFloat()
    {
        return 
floatval($this->value);
    }


    
/**
     * Return the version as an integer
     *
     * @return int
     */

    
public function toNumber()
    {
        return 
intval($this->value);
    }


    
/**
     * Return the version as a human readable string
     *
     * @return string
     */

    
public function toString()
    {
        if (!empty(
$this->alias)) {
            return 
$this->alias;
        }

        
$version '';

        if (!empty(
$this->nickname)) {
            
$version .= $this->nickname ' ';
        }

        if (!empty(
$this->value)) {
            if (
preg_match("/([0-9]+)(?:.([0-9]+))?(?:.([0-9]+))?(?:.([0-9]+))?(?:([ab])([0-9]+))?/"$this->value$match)) {
                
$v = [ $match[1] ];

                if (
array_key_exists(2$match) && strlen($match[2])) {
                    
$v[] = $match[2];
                }

                if (
array_key_exists(3$match) && strlen($match[3])) {
                    
$v[] = $match[3];
                }

                if (
array_key_exists(4$match) && strlen($match[4])) {
                    
$v[] = $match[4];
                }

                if (!empty(
$this->details)) {
                    if (
$this->details 0) {
                        
array_splice($v$this->details$this->details);
                    }

                    if (
$this->details 0) {
                        
array_splice($v$this->detailscount($v) - $this->details);
                    }
                }

                if (isset(
$this->builds) && !$this->builds) {
                    
$count count($v);
                    for (
$i 0$i $count$i++) {
                        if (
$v[$i] > 999) {
                            
array_splice($v$i1);
                        }
                    }
                }

                
$version .= implode('.'$v);

                if (
array_key_exists(5$match) && strlen($match[5])) {
                    
$version .= $match[5] . (!empty($match[6]) ? $match[6] : '');
                }
            }
        }

        return 
$version;
    }


    
/**
     * Get an array of all defined properties
     *
     * @internal
     *
     * @return array
     */

    
public function toArray()
    {
        
$result = [];

        if (!empty(
$this->value)) {
            if (!empty(
$this->details)) {
                
$parts explode('.'$this->value);
                
$result['value'] = join('.'array_slice($parts0$this->details));
            } else {
                
$result['value'] = $this->value;
            }
        }

        if (!empty(
$this->alias)) {
            
$result['alias'] = $this->alias;
        }

        if (!empty(
$this->nickname)) {
            
$result['nickname'] = $this->nickname;
        }

        if (isset(
$result['value']) && !isset($result['alias']) && !isset($result['nickname'])) {
            return 
$result['value'];
        }

        return 
$result;
    }
}
Онлайн: 2
Реклама