PHP [OOP]:继承的内存分配

时间:2009-12-14 08:22:48

标签: 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> ÿ

x< ÿ

3 个答案:

答案 0 :(得分:7)

这些是我的数字:

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的定义,那么使用新B()或新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";

答案 1 :(得分:3)

您可以使用memory_get_usage功能对此进行调查。

答案 2 :(得分:1)

它应该是公共的$ x,$ y,$ z。

并且$ b占用更多内存,因为它内部有一个A实例。