public static function getValue($propertyName, $methodName)
    {
        $requestClass       = static::class;
        $abstractParamClass = static::BASE_PARAM_CLASS;

        // use the property if it exists in the corresponding method of the request class
        // this is the plural of the method name; as in getDefaultValue() calls getDefaultValues() here
        $requestValues = $requestClass::{$methodName.'s'}();

        if (array_key_exists($propertyName, $requestValues)) {
            return $requestValues[$propertyName];
        }

        // use the property if it exists in the $methodName() method of the Request Type -> Param class
        // for example, for a Data request, this looks in JasonRoman\NbaApi\Params\Data\<Property>Param
        $requestTypeParamClass = $abstractParamClass::getRequestTypeParamClass(
            $requestClass::getDomain(),
            $propertyName
        );

        // make sure the class exists and is an instance of the base param class
        if (class_exists($requestTypeParamClass) && is_subclass_of($requestTypeParamClass, $abstractParamClass)) {
            $requestTypeValue = $requestTypeParamClass::$methodName();

            // if the default is anything other than null, set the value
            if (!is_null($requestTypeValue)) {
                return $requestTypeValue;
            }
        }

        // use the property if it exists in the $methodName() method of the base Param class
        // for example, this looks in JasonRoman\NbaApi\Params\<Property>Param
        $paramClass = $abstractParamClass::getParamClass($propertyName);

        // make sure the class exists and is an instance of the base param class
        if (class_exists($paramClass) && is_subclass_of($paramClass, $abstractParamClass)) {
            $value = $paramClass::$methodName();

            // if the default is anything other than null, set the value
            if (!is_null($value)) {
                return $value;
            }
        }
    }