PHP手动内存分配和类/对象大小

Tid*_*ddo 2 php arrays malloc

由于PHP不提供真正的数组,我想自己创建一个数组类.但是,我最好不要为PHP数组创建某种包装类,但我真的想创建一个真正的数组,就像在C/C++中一样.但是,如果我不想在PHP数组中使用构建,我需要有一些方法来手动分配内存,并找到对象/类的大小.所以我需要一个PHP版本的c函数sizeof和malloc.不幸的是,我找不到PHP中的那些.是否存在执行相同操作的功能,或者您知道其他任何方法吗?

编辑:我认为我的问题不够明确:在PHP中,数组实际上是一个订单图.在某些情况下,这可能会使事情变得更复杂:例如,如果您有一个索引为0,1,2和3的数组,则无法继续,您将在foreach循环中按顺序获取这些项:它取决于您在数组中定义项目的顺序.既然这些小事烦恼了我,我想创建一个'真正的'数组类,基于类似于c/c ++的数组.这意味着数组应该具有固定的大小,并且我需要在初始化数组时手动分配内存.例如,当创建10个整数的数组时,数组类应该分配大小为10*sizeof(整数)的内存块.当然我可以使用PHP'array'中的构建来存储这10个整数,但是我刚刚为构建数组类型创建了一个包装类.所以我最好能够自己分配内存,这样我就能以更好的方式管理它,即数组类型的构建.但是,我找不到一个给出类/对象大小的函数,我可以找到一个可以手动分配内存的函数,就像c中的malloc一样.所以我的问题是:这有什么功能吗?如果他们不是,你有没有其他有效的方法来实现我的目标?

Gor*_*don 8

PHP已经有一个Array Class,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';
Run Code Online (Sandbox Code Playgroud)

0 => bar
1 => foo
2 => baz
Run Code Online (Sandbox Code Playgroud)

最后

致命错误:未捕获的异常'RuntimeException',消息'索引无效或超出范围'

SPL中还有一些额外的数据结构.有关概述,请参阅

如果您想知道如何SplFixedArray在PHP中实现,请查看

如果你想要任何不同的东西,你可能必须在语言的C级实现它,例如你必须编写自己的扩展.