2009-12-14 71 views
3

请参见下文的代码:PHP [OOP]:用于继承内存分配

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() 

从上面的代码让$一个被分配X量的存储器和$ B是分配内存量;

现在我的问题是哪一个是正确从波纹管?

X> Y

X <Ÿ

回答

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

它应该是公共$ X,$ Y,$ž。

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

+2

吹毛求疵:它更像是“'$ B' *是*的A,但更多的东西”比“有一个内部的实例”。 :) – deceze 2009-12-14 08:33:29