php中的关键字new是否意味着在堆上分配内存?

use*_*256 4 php

php中的关键字new是否意味着在堆上分配内存?恩.

class person {
    // properties and methods
}

$p1 = new person();
Run Code Online (Sandbox Code Playgroud)



有没有办法在PHP中像在c ++中一样在堆栈中创建对象?
恩.

class person {
    // properties and methods
}

//inside in main stack
int main() {
person p1;
Run Code Online (Sandbox Code Playgroud)

Ada*_*onR 5

在幕后,当您使用"new"关键字创建对象时,您将创建一个zval.用于在核心库和扩展中创建zval的宏为zval分配内存,所以答案是肯定的,在PHP中创建一个对象会导致创建一个存储在堆上的对象.实际上,所有类型的PHP变量都是幕后的zvals(这使得转换变得容易),因此它们实际上都存储在堆上.

如果要将数据存储在堆栈中,最好使用其他语言.

  • 不,这些类型的东西对于典型的PHP开发并不重要.PHP提取了您在低级语言中遇到的许多复杂性(例如,PHP数组是真正有序的哈希映射,可以满足广泛的存储需求.)如果您想稍后构建扩展,那么您将拥有要了解有关这些复杂性的更多信息,但对于纯PHP开发,这不是问题. (3认同)

bru*_*ais 1

答案是肯定的。

另外,您不应该控制 PHP 控制内存的方式。这是 PHP 等高级语言的一部分。请注意,C++ 是一种相当低级的语言(该语言本身不考虑不同的操作系统,您必须为不同的操作系统编写不同的代码(您可以使用 ofc 库来为您做到这一点))。