Se $lang non ti serve altrove allora è inutile, a che serve assegnare ad una variabile qualcosa che hai già disponibile in un'altra? Sprechi solo memoria per mantenere quella variabile.
Perché usi array_shift()? Quell'array poi non lo usi più, quindi usare una funzione per tirare fuori il primo valore ed eliminarlo da quell'array è tutto lavoro sprecato. Il valore prendilo direttamente come fai nell'if.
Codice PHP:
if($url != NULL && file_exists('../app/languages/' . $url[0]))
{
$_SESSION['lang'] = $url[0];
setcookie('lang', $url[0], time() + (3600 * 24 * 30));
}
else
{
if(!isset($_COOKIE['lang']) && !isset($_SESSION['lang']))
{
if (file_exists('../app/languages/' . $http_lang))
{
$_SESSION['lang'] = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
}
else
{
$_SESSION['lang'] = $this->defaultLanguage;
}
}
elseif (isset($_COOKIE['lang']) && !isset($_SESSION['lang']))
{
$_SESSION['lang']= $_COOKIE['lang'];
}
}