Flow\Template::getAttr PHP Method

getAttr() public method

public getAttr ( $obj, $attr, $args = [] )
    public function getAttr($obj, $attr, $args = array())
    {
        if (is_array($obj)) {
            if (isset($obj[$attr])) {
                if ($obj[$attr] instanceof \Closure) {
                    if (is_array($args)) {
                        array_unshift($args, $obj);
                    } else {
                        $args = array($obj);
                    }
                    return call_user_func_array($obj[$attr], $args);
                } else {
                    return $obj[$attr];
                }
            } else {
                return null;
            }
        } elseif (is_object($obj)) {
            if (is_array($args)) {
                $callable = array($obj, $attr);
                return is_callable($callable) ? call_user_func_array($callable, $args) : null;
            } else {
                $members = array_keys(get_object_vars($obj));
                $methods = get_class_methods(get_class($obj));
                if (in_array($attr, $members)) {
                    return @$obj->{$attr};
                } elseif (in_array('__get', $methods)) {
                    return $obj->__get($attr);
                } else {
                    $callable = array($obj, $attr);
                    return is_callable($callable) ? call_user_func($callable) : null;
                }
            }
        } else {
            return null;
        }
    }