Nasljedivanje klasa

Znaci imam klasu: Autoloader, Config, Sql, SqlConnection i tako…
Autoloader, Config i Sqlconnnection su mi potrebni za sve, a sa extend mogu nasljediti samo jednu klasu…Kako cu ih sve ubaciti/nasljediti bez da koristim globalke?

Koristi singleton pattern, a ne proširuj klase. Proširivanje ima drugačiju svrhu.

Alternativno, definiraj Autoloader, Config i Sql Connection kao statične klase što ih čini dostupnim bez obzira na kontekst.

[quote=“jojo”]Znaci imam klasu: Autoloader, Config, Sql, SqlConnection i tako…
Autoloader, Config i Sqlconnnection su mi potrebni za sve, a sa extend mogu nasljediti samo jednu klasu…Kako cu ih sve ubaciti/nasljediti bez da koristim globalke?[/quote]

Alternativno onome što je rekao voajer da imaš kao statične klase, možeš napraviti jednu statičnu klasu Registry koja će čuvati objekte, a sve što ti moraš je na početku ih instancirati.

Recimo Autoloader bi napravio kao statičnu klasu, Config kao sigleton dok bih Sqlconnection, u slučaju da ne želiš samo podršku za spajanje na jednu bazu, napravio kao običnu klasu i još jednu tipa ConnectionManager koja bi bila statična ili obična pa spremljena u Registry i ona bi se brinula oko stvaranja/uništavanja veza i njihovim upravljanjem. Ako želiš samo jednu vezu, singleton je najbolji način.

Kao što vidiš, ima više načina. Uzmi onaj koji najviše odgovara tvom stilu programiranja, ali gledaj si tako da ti je kasnij što lakše proširiti kod i da ti se je lagano služiti njime.

Moze li mi neko dati primjer singleton patterna, i objasniti kako radi? Na hrvatskom naravno… :frowning:

Najjednostavniji primjer.

Što je naš cilj? Naš cilj je da može postojati samo jedna instance klase. Zato stavimo konstruktor kao private tako da se ne može izvana instancirati, no napravimo jednu statičnu metodu koja će vratiti taj objetk (i instancirati ga ako već nije).

[quote=“zlikavac32”]<span class="syntaxdefault"></span><span class="syntaxkeyword">class&nbsp;</span><span class="syntaxdefault">Singleton<br /></span><span class="syntaxkeyword">{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;</span><span class="syntaxdefault">Singleton</span><span class="syntaxkeyword">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">//Konstruktor<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;</span><span class="syntaxdefault">getInstance</span><span class="syntaxkeyword">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$instance&nbsp;</span><span class="syntaxkeyword">===&nbsp;</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$instance&nbsp;</span><span class="syntaxkeyword">=&nbsp;new&nbsp;</span><span class="syntaxdefault">Singleton</span><span class="syntaxkeyword">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">$instance</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;static&nbsp;</span><span class="syntaxdefault">$instance&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">;<br /><br />}&nbsp;</span><span class="syntaxdefault"></span>

Najjednostavniji primjer.

Što je naš cilj? Naš cilj je da može postojati samo jedna instance klase. Zato stavimo konstruktor kao private tako da se ne može izvana instancirati, no napravimo jednu statičnu metodu koja će vratiti taj objetk (i instancirati ga ako već nije).[/quote]

aha, hvala :slight_smile: a sad me zanima, mogu li nekako pozivati klasu da se za svaku metodu u drugoj klasi ona ubaci…

primjer:

znaci da skratim muke s ovim $sql = new Sql() …

Hmm, nisam skužio dobro, ali imaš dvije alternative.

Prvo unutar te Sql kalse napravit statičnu metodu tipa

ili unutar te Klasa1 napraviti metodu getSql kao gore (ako potrebno statičnu, ali bolje ne).

[quote=“zlikavac32”]Hmm, nisam skužio dobro, ali imaš dvije alternative.

Prvo unutar te Sql kalse napravit statičnu metodu tipa

ili unutar te Klasa1 napraviti metodu getSql kao gore (ako potrebno statičnu, ali bolje ne).[/quote]

hvala za sve savjete, skuzio sam sam :wink: prvi put sa svojih 15 god sam razvio mvc framework :stuck_out_tongue:
klase se povezuju, u controlleru index() metoda je naslovna stranica a ostale metode su podstranice i sve ostalo :slight_smile: <3

[quote=“jojo”]aha, hvala :slight_smile: a sad me zanima, mogu li nekako pozivati klasu da se za svaku metodu u drugoj klasi ona ubaci…

primjer:

znaci da skratim muke s ovim $sql = new Sql() …[/quote]

Tu klasu mozes instancirati van ove klase i predati je kao parametar funkciju (ili jos bolje konstruktoru klase, posto je koristis u vise metoda).


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja