3 Stimmen

PHP [OOP] : Speicherzuweisung für Vererbung

Bitte sehen Sie sich den nachstehenden Code an:

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

Aus dem obigen Code lässt sich $a vergibt x Speicherplatz und $b vergibt y Menge an Speicherplatz;

Meine Frage ist nun, welche davon richtig von unten?

x > y

x < y

7voto

Peter Lindqvist Punkte 9942

Dies sind meine Zahlen:

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

So x < y

Diese beiden Klassendefinitionen sind gleichwertig

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

Das heißt, wenn Sie die Definition von B in die von C ändern würden, wäre der Speicherverbrauch bei der Verwendung von new B() oder new C() genau derselbe.

Um es selbst auszuführen, verwenden Sie diesen Code (als Beispiel)

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

3voto

miku Punkte 170688

Sie können dies untersuchen, indem Sie die memory_get_usage Funktion.

1voto

yu_sha Punkte 4110

Sie sollte öffentlich sein $x, $y, $z.

Und $b nimmt mehr Speicherplatz ein, weil es eine Instanz von A enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X