phpffcms/ffcms-core

View on GitHub
src/Helper/Type/Any.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Ffcms\Core\Helper\Type;

/**
 * Class Any. Work with unknown variable types. Some magic and drugs inside. Use careful!
 * @package Ffcms\Core\Helper\Type
 */
class Any
{
    /**
     * Check if unknown type variable is looks like empty
     * @param mixed $var
     * @return bool
     */
    public static function isEmpty($var = null): bool
    {
        // var is array type?
        if (is_array($var)) {
            return count($var) < 1;
        }

        // float,int,string,bool and null left. Check if not empty. Int and float will never equal to null.
        return ($var === null || $var === '' || $var === false);
    }

    /**
     * Check if $var is int or looks like integer and parseInt by ref
     * @param mixed $var
     * @return bool
     */
    public static function isInt(&$var = null): bool
    {
        $parse = filter_var($var, FILTER_VALIDATE_INT);
        if ($parse !== false) {
            $var = $parse;
            return true;
        }

        return false;
    }

    /**
     * Check if $var is string
     * @param mixed $var
     * @return bool
     */
    public static function isStr($var = null): bool
    {
        return is_string($var);
    }

    /**
     * Check if $var is like float and parseFloat by ref
     * @param mixed $var
     * @return bool
     */
    public static function isFloat(&$var = null): bool
    {
        $parse = filter_var($var, FILTER_VALIDATE_FLOAT);
        if ($parse !== false) {
            $var = $parse;
            return true;
        }
        return false;
    }

    /**
     * Check if $var is array type
     * @param mixed $var
     * @return bool
     */
    public static function isArray($var = null): bool
    {
        return is_array($var);
    }

    /**
     * Check if $var is iterable
     * @param mixed $var
     * @return bool
     */
    public static function isIterable($var = null): bool
    {
        return is_iterable($var);
    }

    /**
     * Check if var is boolean and parseBool by ref
     * @param mixed $var
     * @return bool
     */
    public static function isBool(&$var = null): bool
    {
        // will return true for "1", true, "on", "yes", false for 0, "false", "off", 'no', '', NULL FOR ANY OTHER VALUE!!!
        $parse = filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
        if ($parse !== null) {
            $var = $parse;
            return true;
        }
        return false;
    }

    /**
     * Check if $var is object type
     * @param mixed $var
     * @return bool
     */
    public static function isObj($var = null): bool
    {
        return is_object($var);
    }

    /**
     * Guest var value by strict type
     * @param mixed $var
     * @return mixed
     */
    public static function guessValueType($var = null)
    {
        // pass var by reference and guess var type
        if (self::isInt($var)) {
            return $var;
        }

        if (self::isFloat($var)) {
            return $var;
        }

        if (self::isBool($var)) {
            return $var;
        }


        return $var;
    }

    /**
     * Check if $var is "line" type based: string,int,float,null
     * @param mixed $var
     * @return bool
     */
    public static function isLine($var = null): bool
    {
        return (!is_object($var) && !is_iterable($var));
    }

    /**
     * Check if object is anonymous function or callable instance not like a string notation
     * @param $object
     * @return bool
     */
    public static function isCallableNotString($object)
    {
        return is_callable($object) && !is_string($object);
    }
}