2011-10-15 60 views
2

由於PHP不提供真正的數組,我想自己創建一個數組類。但是,最好我不想爲PHP數組創建某種包裝類,但我真的想創建一個真正的數組,就像在C/C++中一樣。但是,如果我不想使用PHP數組中的構建,我需要一些手動分配內存的方法,並找到對象/類的大小。所以我需要一個C函數sizeof和malloc的PHP版本。不幸的是,我無法在PHP中找到它們。有沒有相同的功能,或者你知道有其他方式來做到這一點?PHP手動內存分配和類/對象大小

編輯:我想我的問題還不夠清楚: 在PHP中,數組實際上是一個訂單圖。在某些情況下,這可能會使事情變得更加複雜:例如,如果您有一個索引爲0,1,2和3的數組,則無法進行中繼,您將在foreach循環中按順序獲取這些項目:它取決於您在數組中定義項目的順序。由於這些小東西令我煩惱,我想創建一個'真正'的數組類,像c/C++中的數組一樣。這意味着數組應該有一個固定的大小,並且我需要在初始化數組時手動分配內存。例如,當創建10個整數的數組時,數組類應該分配一個大小爲10 * sizeof(integer)的內存塊。當然,我可以使用PHP數組中的構建來存儲這10個整數,但是我已經爲構建數組類型創建了一個包裝類。所以我最好能夠自己分配這些內存,這樣我就可以更好地管理數組類型的構建。然而,我找不到一個函數,它給了我一個類/對象的大小,我可以找到一個可以手動分配內存的函數,就像malloc在c中一樣。 所以我的問題是:有這個功能嗎?如果他們不是,你有沒有其他有效的方法來實現我的目標?

+1

'PHP'處理自己的內存分配和垃圾收集。你爲什麼需要這樣做?您可以使用'memory_get_usage()'來跟蹤腳本的當前內存使用情況。 –

+0

因爲我想要一些真正的數組。如果我創建一個Array類,我也可以創建一個好的而不是僅僅包含一個php數組的封裝。 – Tiddo

+0

PHP數組有什麼問題?他們怎麼不是真正的數組? –

回答

8

PHP已經有一個Array Class with SplFixedArray行爲像你想:

$array = new SplFixedArray(3); 
$array[1] = 'foo'; 
$array[0] = 'bar'; 
$array[2] = 'baz'; 
foreach ($array as $k => $v) { 
    echo "$k => $v\n"; 
} 
$array[] = 'fails'; 

0 => bar 
1 => foo 
2 => baz 

最後

Fatal error: Uncaught exception 'RuntimeException' with message 'Index invalid or out of range'

有一對夫婦的額外data structures in SPL。有關概述,請參閱

如果你想知道如何SplFixedArray在PHP中實現,看看

如果你想任何不同的東西,你可能不得不在語言的C級實現它e,例如你必須寫你自己的擴展。

+0

謝謝(再次)!那正是我想要的。我應該先找到一個! – Tiddo

+0

也感謝您添加的鏈接!他們非常有幫助。 – Tiddo

0

不知道

您可運行內存,爲您的數組大小是(理論上)只分配給腳本的內存量的限制。
ini_set('memory_limit', '1024M'); 在您的腳本開始將內存限制設置爲1 GB。爲了獲得最佳效果,您可能需要增加更高的值。

+0

不記得的malloc因此這就是爲什麼不知道 – Wazzzy

+0

但是,這仍然沒有按解決我的問題,因爲我沒有辦法手動分配內存... – Tiddo