protected function getObjectProperty($variable, $property, array $args)
    {
        $value = null;
        $method1 = $property;
        $method2 = 'get' . ucfirst($property);
        $method3 = 'get_' . $property;
        if (method_exists($variable, $method1)) {
            $value = call_user_func_array(array($variable, $method1), $args);
        } elseif (method_exists($variable, $method2)) {
            $value = call_user_func_array(array($variable, $method2), $args);
        } elseif (method_exists($variable, $method3)) {
            $value = call_user_func_array(array($variable, $method3), $args);
        } elseif (method_exists($variable, '__get')) {
            @$value = $variable->$property;
        } elseif (method_exists($variable, '__call')) {
            try {
                $value = @call_user_func_array(array($variable, $property), $args);
            } catch (Exception $e) {
            }
            if ($value === null || $value === '') {
                try {
                    $value = call_user_func_array(array($variable, $method1), $args);
                } catch (Exception $e) {
                }
            }
            if ($value === null || $value === '') {
                try {
                    $value = call_user_func_array(array($variable, $method2), $args);
                } catch (Exception $e) {
                }
            }
            if ($value === null || $value === '') {
                try {
                    $value = call_user_func_array(array($variable, $method3), $args);
                } catch (Exception $e) {
                }
            }
        }
        return $value;
    }