【问题标题】:Instantiate: what should happen at low level实例化:在低级别应该发生什么
【发布时间】:2016-02-07 13:42:45
【问题描述】:

我正在慢慢阅读用 C 编写的 PHP 7 源代码。但我真的对“实例化一个类”很好奇。在 PHP 中,这种情况发生在写作 $myclassvar = new myclass()

这段代码在 C 中究竟应该做什么? $myclass 是什么类型的变量?我们为什么要instantiatea 类?这是否意味着调用构造函数 __construct() ?你能解释一下这段代码应该指什么(详细)。谢谢

【问题讨论】:

  • 根据我的编辑,实例中的正确术语,如在对象的实例中。

标签: php c


【解决方案1】:

C 没有类,但 C 中最接近的东西是堆上的 mallocing 结构。 PHP代码$myclassvar = new myclass()

最相似
typedef struct {
    int x, y;
} pt;

pt *p = malloc(sizeof(pt));

【讨论】:

  • 是的。我认为 struct 是 $myclass 的真正类型。所以 PHP 编译器应该使用 malloc() 分配空间,然后调用构造?
  • 是的,PHP 编译器在构造函数中调用malloc,在析构函数中调用free
  • PHP 应该只在 __construct() 中调用的变量/函数上调用 malloc 并在之后使用 realloc,还是 malloc 整个类?
  • @Andrea 它将 malloc 整个类,以提高效率,因为重新分配的计算成本可能很高,而且您通常会使用所有字段
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2013-01-16
  • 1970-01-01
  • 2017-02-18
  • 2011-03-01
相关资源
最近更新 更多