Can anyone explain the differences both functionally and in terms of good/bad practice whhy one of these should be preferred over the other:
$getParam = Mage::app()->getRequest()->getParam('getparam'); v
$getParam = $_GET['getparam']; There is a significant difference between the two. $_GET is simply an array, like $_POST. However, calling Mage::app()->getRequest()->getParam('param_name') will give you access to both GET and POST (DELETE and PUT are not included here) - see code below:
lib/Zend/Controller/Request/Http.php public function getParam($key, $default = null) { $keyName = (null !== ($alias = $this->getAlias($key))) ? $alias : $key; $paramSources = $this->getParamSources(); if (isset($this->_params[$keyName])) { return $this->_params[$keyName]; } elseif (in_array('_GET', $paramSources) && (isset($_GET[$keyName]))) { return $_GET[$keyName]; } elseif (in_array('_POST', $paramSources) && (isset($_POST[$keyName]))) { return $_POST[$keyName]; } return $default; } In addition, if the system sets other params with Mage::app()->getRequest()->setParam(), it becomes accessible via the getParam() function. In Magento you want to always use getParam().
setParam()?setParam() other than to filter or parse values before they get to the system (in a predispatch observer). That isn't something that is used often, but it is helpful when you need it.Mage::app()->getRequest()->getParam('getparam'); Will return you 'getparam' if it is send with GET, POST (not sure about DELETE, PUT ...) request. Did not work with Magento but if there parameters that sent through routing. I would expect them also being accessible through that function.
$_GET contains only parameters sent through GET
$_POST contains only parameters sent through POST