PHP [面向对象] : Memory allocation for Inheritance

标签 php oop inheritance memory-management extend

请看下面的代码:

class A {
    public x = 5;
    public y = 6;
    public z = 7;
}

class B extends A {
    public m = 1;
    public n = 2;
}

$a = new A();
$b = new B()

从上面的代码可以看出,$a 正在分配 x 内存量,而 $b 正在分配 y内存量;

现在我的问题是下面哪一个是正确的?

x > y

x < y

最佳答案

这些是我的数字:

Starting allocation 62480
Allocated memory for new A() 328
Allocated memory for new B() 496

因此 x < y

这两个类定义是等价的

class B extends A {
    public $m = 1;
    public $n = 2;
}

class C {
    public $x = 5;
    public $y = 6;
    public $z = 7;
    public $m = 1;
    public $n = 2;
}

这意味着如果您将 B 的定义更改为 C 的定义,那么内存使用将与使用 new B() 或 new C() 完全相同。

要自己运行它,请使用此代码(作为示例)

$start = memory_get_usage();
echo "Starting allocation $start\n";
$a = new A();
$diff = memory_get_usage() - $start;
echo "Allocated memory for new A() $diff\n";
$b = new B();
$diff = memory_get_usage() - $start - $diff;
echo "Allocated memory for new B() $diff\n";

关于PHP [面向对象] : Memory allocation for Inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899629/

相关文章:

php - 使用旧/新语法调用 PHP 父构造函数

java - 在 Java 中从其父类复制字段

c++ - 如何使用 vector 作为基类

java - 方法链 + 继承不能很好地结合在一起?

oop - 这种情况是对抽象的过度使用吗?

php - Laravel 7 - 使用 REST API 而不是数据库

php - 如何在 Laravel 5.2 中显示索引方法

javascript - 如何让这个JS倒计时时钟依赖DB值来倒计时?

php - 如何将codeigniter事件记录放入if elseif语句中

php - 构建 PHP 代码以链接对象创建和数据库写入?