2010-07-29 67 views
4

每個PHP實例的PHP資源ID是唯一的嗎?將所有類型的資源轉換爲字符串是否返回「Resource id #X」(其中X是一些十進制數)?有沒有函數返回資源ID(我知道get_resource_type()獲取資源類型,但沒有找到像get_resouce_id()這樣的東西),還是必須這樣做?PHP資源ID是唯一的嗎?

function get_resource_id($resource) 
{ 
    return is_resource($resouce) 
      ? substr((string) $resource, 13 /* strlen("Resource id #") */) 
      : NULL; 
} 
+1

關於的 「資源ID#1」 的結構 - [PHP手冊](http://www.php.net/manual/en/language.types.string .php#language.types.string.casting)的確聲明:「不要依賴這個結構;它可能會發生變化」,所以你的方法來獲取ID不被推薦。 – MrWhite 2010-07-29 09:57:28

+0

@ w3d不幸的是,我不知道任何更好的(其他)方法來獲得ID。你做? – 2010-07-30 13:12:09

+0

對不起,不是真的!除了可能驗證你確實得到一個返回的數字字符串,如果沒有,然後嘗試另一種方法來獲得ID例如。在'#'上爆炸()並得到第二個元素(如果它存在)等。返回的字符串完全依賴於(的版本)PHP?或者有可能資源本身可以影響鑄造過程中發生的事情?! TBH,如果它只是PHP,那麼你可能會很安全,我會認爲......現在!?如果你只是在一個唯一的ID後,那麼你可以使用整個字符串,或_hash_它可能是? – MrWhite 2010-07-30 14:22:19

回答

4

Jakub,yes PHP將始終爲您提供每個當前正在使用的資源的唯一ID。當資源未設置()或釋放時,如mysql_free_result。然後該ID再次可用,PHP可以再次使用這些資源。

如果您在會話中「緩存」或將資源ID保留在會話中並重復使用它們,請注意,因爲PHP可能會釋放資源,然後使用該ID重新創建新資源,並且您的舊資源ID可能指向新的資源ID。

所以你有它,資源是獨特的,但不是永遠!

希望這有助於揭祕PHP中的資源類型。

+0

在某些環境中,不可能在連接到相同(共享)資源時,2個不同的用戶可以獲得_same_資源ID?或者那是不可能的? – MrWhite 2010-07-30 14:02:59

6

容易,因爲它接縫

intval($resource)