2015-08-18 2 views
0

Каркас CodeIgniter имеет ужасную функцию is_php().Статические переменные, объявленные за пределами класса

/** 
* Determines if the current version of PHP is greater then the supplied value 
* 
* Since there are a few places where we conditionally test for PHP > 5 
* we'll set a static variable. 
* 
* @access public 
* @param string 
* @return bool TRUE if the current version is $version or higher 
*/ 
if (! function_exists('is_php')) 
{ 
    function is_php($version = '5.0.0') 
    { 
     static $_is_php; 
     $version = (string)$version; 

     if (! isset($_is_php[$version])) 
     { 
      $_is_php[$version] = (version_compare(PHP_VERSION, $version) < 0) ? FALSE : TRUE; 
     } 

     return $_is_php[$version]; 
    } 
} 

Обратите внимание, что переменная $_is_php определяется static. Эта функция не определена ни в одном классе, поэтому я не вижу, чтобы определение static было правильным синтаксисом, даже если оно (предположительно) имеет (предполагаемый) предполагаемый эффект от изменения переменной в вызовах функций. Я не вижу этого использования, упомянутого в the PHP documentaion. Где это неклассовое использование ключевого слова static? Является ли это недокументированной функцией PHP и, возможно, не поддерживается и, следовательно, не следует полагаться?

ответ

2

static переменные определены и задокументированы в variable scope manual page.

Значение немного отличается от ключевого слова static, который объявляет свойства класса. В этом случае переменные static просто сохраняют свою ценность даже при вызове функций, когда они должны выйти из сферы действия, но не подвергая их видимости внешнему миру.

+0

Эй, там долгое время нет! Спасибо, справочная страница, на которую вы ссылаетесь, суммирует ее, интересно, почему Google не возвращает ее при поиске статичности PHP. – dotancohen

Смежные вопросы