2015-08-18 100 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