Temeljna stvar je da treba razlikovati dvije vrste metoda: javne, tj. one kojima ce pristupati i pozivati ih drugi objekti, te privatne, koje se koriste samo unutar tvoje klase. PHP4 nema formalnog nacina razlikovanja -- tu su sve metode automatski javne -- ali se ponekad imena privatnih metoda zapocinju s _ kako bi ih se razlikovalo.
Razlika je u tome da kod privatnih metoda mozes raditi sto i kako hoces -- dok metoda radi ono sto tije u klasi potrebno, nepotrebno je kako to radi. U tvom primjeru, sasvim je nebitno hoce li konstruktor boje() koristiti implementaciju kakvu si napisao, ili ce samo pozvati $this->popuniSveBoje() koji se onda obaviti assignment varijable.
Medjutim, javne metode moraju biti vrlo jasne i definirane, te ne smiju imati side-efekata. Sve sto rade na vlastitom objektu mora biti enkapsulirano u njima, tako da nema poziva iz nekog objekta u stilu:
$mojeBoje->sveBoje = $mojeBoje->popuniSveBoje()
Umjesto toga, javna metoda mora atribute vlastitog objekta popuniti u sebi, ili pozvati neke druge (privatne) metode koje ce to obaviti.
Takodjer, iako mi je jasno da kod koji si postavio nije stvaran kod neke aplikacije, nalazim nekoliko problema u njemu. Prvo, nije jasno kakva je to klasa "boje", sto ona predstavlja? Ne zaboravi da se u izvrsavanju koda ne koriste
klase, vec njihove instance, odnosno
objekti, koji su kombinacija odredjenih atributa i metoda, tj. "znanja i ponasanja". Kakav je to objekt "boje"? I tko tocno poziva njegove metode, odnosno tko obavlja manipulaciju bojama po principu a(), b() ili c()?
Pretpostavljam (ispravi me ako grijesim) da tvoje "boje" predstavljaju skup boja nekog drugog objekta. Dakle, ne radi se o objektu, vec o nizu atributa tog drugog objekta, koji iz nekog razloga ne moze sam njima manipulirati (usporedba iz stvarnosti: auto ne moze promijeniti vlastitu boju). Stoga je potrebno napraviti novi objekt -- ili preciznije klasu, koja prema okolnostima moze biti standardna, staticna ili nekakav singleton ili monostate (odnosno kako to Python ekipa lijepo zove, Highlander ili Borg

). Odgovornost tog objekta biti ce manipulacija bojama naseg objekta, pa ju mozemo lijepo nazvati Painter ili u njemu implementirati odgovarajuce metode baratanja bojama.
Jasno, ovo je ovako samo iz glave, bez preciznog poznavanja stvarnih potreba tvoje aplikacije. Ali postojanje problema se vrlo lako moze uociti iz cinjenice da ti je ime klase u mnozini, sto je
uvijek znak pogresnog dizajna. Klase predstavljaju objekte; kad stvaras klasu, uvijek joj daj ime kao imenicu u jednini, te se pritom pitaj "predstavlja li ta moja imenica stvaran objekt, koji nesto zna (atributi) i/ili moze (metode)?" Npr. primjeri dobrih klasa su Automobil, Pas, Svjetiljka itd; stvari kao Ljubav, Sloboda, Pijesak bas i nisu.