webForumDet fria alternativet

klass ärvning

1 svar · 273 visningar · startad av The_Hulk

The_HulkMedlem sedan juni 20031 937 inlägg
#1

Hej!

Om jag har klasserna A och B, B ärver från A.
Om jag vill skicka vidare argumenten från B:s konstruktor, vilket är bäst att lösa det på, alt 1 eller alt 2? Under förutsättning att inte A:s konstruktor gör något annat med argumentet.

class A
{
    var $my_text;

    function A($text)
    {
        // do something with $text
        $this->my_text = $text;
    }
}

class B extends A
{
    function B($text)
    {
        parent::A($text); // alt 1
        // or
        $this->my_text = $text; // alt 2
    }
}

Tack på förhand!

spangoMedlem sedan juni 20006 147 inlägg
#2

Beror på. Vill du i klass B vara säker på att allt initieras som i A, ska du använda alt. 1. Vill du å andra sidan vara säker på att det enda som händer i konstruktorn är att my_text får ett värde är alt. 2 att föredra. I den riktiga världen är det i princip bara alt. 1 som används, eftersom det är ganska sopig OO att utgå ifrån att man vet vad som händer inuti en annan metod.

I en del språk (främst hårt typade och kompilerade språk som C++, Java, C# etc) måste man anropa en konstruktor i föräldraklassen oavsett vad man gör, så där är problemet på sätt och vis löst, men i språk som inte kräver det anses det allmänt vara god ton att anropa en parent-konstruktor för att man ska vara säker på att superklassdelen är korrekt initialiserad.

125 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
122 ms — hämta tråd, inlägg och bilagor (db)