PHP [OOP]: Veraset için bellek ayırma

3 Cevap php

Please see the code bellow:

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

Yukarıdaki kod Let $a bellek x miktarı ve $b bellek y miktarı tahsis edilir tahsis edilir;

Şimdi soru correct körük hangi biridir?

x > y

x < y

3 Cevap

Bunlar benim numaraları:

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

Böylece x < y

Bu iki sınıf tanımları eşdeğerdir

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;
}

Anlamı o daha sonra bellek kullanımı, yeni B kullanarak aynı olacağını C o içine B tanımını değiştirmek () veya yeni C () vardı.

Kendiniz çalıştırmak için (örnek olarak) bu kodu kullanabilirsiniz

$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";

Sen memory_get_usage fonksiyonunu kullanarak bu araştırabilirsiniz.

Kamu $ x, $ y, $ z olmalıdır.

Bu bir iç örneğini vardır çünkü ve $ b daha fazla bellek kaplıyor.