Avatar billede googolplex Novice
24. januar 2005 - 14:52 Der er 9 kommentarer og
1 løsning

OOP (PHP5), initialisering af variabler

Hvis jeg benytter set/get metoder til mine variabler, hvilken metode er så 'korrekt', når jeg skal initialisere variabler i __construct:

class foo
{
    protected $bar;

    public function __construct()
    {
        this->bar = 'something';
    }

    public function setBar($bar)
    {
        // Check if $bar is valid
        $this->bar = $bar;
    }
}

// ELLER

class foo
{
    protected $bar;

    public function __construct()
    {
        this->setBar('something');
    }

    public function setBar($bar)
    {
        // Check if $bar is valid
        $this->bar = $bar;
    }
}

??
Avatar billede mat Nybegynder
24. januar 2005 - 14:59 #1
Mit bud er 1.

setters og getters er jo metoder der tillader andre klasser at ændre attributter i din klasse. Den har jo selv adgang altid.
Derfor kan jeg ikke se nogen grund til at initialisere variabler i en constructor med en intern setter metode?

(disclaimer: min viden om OOP i php kan ligge på et meget lille sted)

mvh mat
Avatar billede mat Nybegynder
24. januar 2005 - 15:01 #2
arg, der var jeg lige kvik nok på submit, getters returnerer data, de ændrer den ikke...
Avatar billede erikjacobsen Ekspert
24. januar 2005 - 15:28 #3
Hvis din get/set metode ud over at sætte den private variabel, også foretager
et check eller en beregning, bør du bruge get/set-metoden, også inde fra klassen.

Og da du ikke kan vide om den måske kommer til at gøre det i fremtiden ("Hov, må
det kun være positive tal? Ok, jeg indsætter lige et check."), fremtidssikrer
du ved at bruge get/set metoderne.

Men 1)-eren er da hurtigere. Lidt.
Avatar billede mat Nybegynder
24. januar 2005 - 15:46 #4
Det er der selvfølgelig noget om.

Men hvis jeg må spørge; Du sender ikke værdien som parameter til constructoren, så ville man ikke i det konkrete tilfælde bare erklære og initialisere variablen i samme åndedrag?

mvh mat
Avatar billede erikjacobsen Ekspert
24. januar 2005 - 18:00 #5
Joh, måske...
Avatar billede googolplex Novice
24. januar 2005 - 23:40 #6
Men da man ofte sender en værdi som parameter til constructoren ved instantiering, er det vel en god ide ar bruge get/set i denne for at undgå dobbeltarbejde i forhold til variabel-tjek?

Læg et svar begge.
Avatar billede mat Nybegynder
25. januar 2005 - 00:14 #7
Det må jeg være enig i. Jeg behøver ikke point.
Avatar billede erikjacobsen Ekspert
25. januar 2005 - 08:02 #8
Jeg behøver heller ikke point, tak.
Avatar billede googolplex Novice
25. januar 2005 - 15:45 #9
Så takker jeg :)

Lige før jeg smutter - er der en af jer der kender en god artikel, der omhandler brugen af public/protected/private variabler/funktioner. Jeg ved godt hvad forskellen er, men jeg er altid i tvivl om hvornår jeg med fordel kan benytte det ene eller det andet.
Avatar billede Slettet bruger
30. januar 2005 - 16:48 #10
Lige et ekstra indspark til det oprindelige spørgsmål:

Hvis du bruger getters og setters, bør du altid bruge dem også indefra. Det er jo meningen at skidtet stadig skal virke korrekt, hvis der bliver lavet en afledt klasse.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester